java - 使用 JPA 创建与实体父类(super class)的关联

标签 java jakarta-ee jpa

我有一个简单的实体类层次结构,如下所示:

Permissable  (super class)
\
 PermissableResource (sub class)

They are persisted in a table like so:

Permissable
-------------
id          PK
resource    FK Resource(resourceId) 

I have another entity called Resource that I want to create an association with. It is persisted in a table like so:

Resource
-------------
resourceId    PK

In my PermissableResource class, I create the association like so:

@JoinColumn(name="resource", referencedColumnName="resourceId")
@ManyToOne
Resource resource;

问题出在 Resource 类上。我想要引用父类(super class) Permissable 而不是子类 PermissableResource。我尝试像这样创建关联:

@OneToOne(mappedBy="resource", cascade= CascadeType.ALL, targetEntity=PermissableResource.class)
private Permissable permissiable;

但这会导致部署时出现以下错误:

Exception Description: The attribute [permissiable] in entity class [class com.dv.oa.model.entity.resource.Resource] has a mappedBy value of [resource] which does not exist in its owning entity class [class com.dv.oa.model.entity.permission.permissable.Permissable]. If the owning entity class is a @MappedSuperclass, this is invalid, and your attribute should reference the correct subclass.. Please see server.log for more details.

它在Permissable中查找关联,而不是在PermissableResource中查找

我认为,由于我使用了 @OneToOnetargetEntity 属性并将其指向 PermissableResource.class 这会起作用。如何在我的实体中保留父类(super class)引用,但将其映射到子类?

最佳答案

我认为问题在于,在 PermissableResource 中,您定义了一个 @ManyToOne 关系,而在 Resource 类中,您定义了一个 @OneToOne。尝试用 @OneToMany 替换后者。

关于java - 使用 JPA 创建与实体父类(super class)的关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14342273/

相关文章:

jakarta-ee - servletRequest是接口(interface)还是类?ServletRequest和HttpServletRequest有什么区别?

jpa - eclipselink连接池

java - Java 和 Android 中对象的作用域和销毁

java - 在不关闭菜单的情况下在菜单中动态添加菜单项

java - 我在哪里可以配置 Java EE 6 中@Asynchronous 调用背后的线程池?

java - 如何防止其他人访问仅限管理员用户的链接

java - 当我在 JPA 代码中设置锁时,它们是在代码中还是在 DBMS 中强制执行?

java - 如何使用 JPA 和 DB2 将 DATETIME 列映射到 Date 对象

java - 在 Google App Engine 上使用 JPA 加载子实体

Java扩展类不保存变量,它能做到吗?