我有一个简单的实体类层次结构,如下所示:
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
中查找
我认为,由于我使用了 @OneToOne
的 targetEntity
属性并将其指向 PermissableResource.class
这会起作用。如何在我的实体中保留父类(super class)引用,但将其映射到子类?
最佳答案
我认为问题在于,在 PermissableResource
中,您定义了一个 @ManyToOne
关系,而在 Resource
类中,您定义了一个 @OneToOne
。尝试用 @OneToMany
替换后者。
关于java - 使用 JPA 创建与实体父类(super class)的关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14342273/