使用JPA创建与实体超类的关联

时间:2013-01-15 16:30:54

标签: java java-ee jpa

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

Permissable  (super class)
\
 PermissableResource (sub class)

它们被保存在这样的表中:

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

我有另一个名为Resource的实体,我想创建一个关联。它保存在如下表格中:

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

在我的PermissableResource课程中,我创建了这样的关联:

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

问题来自Resource类。我想引用超类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

我认为,因为我使用targetEntity的{​​{1}}属性并将其指向@OneToOne,这将起作用。如何在我的实体中保留超类引用,但将其映射到子类?

1 个答案:

答案 0 :(得分:0)

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