1

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

允许的(超类)
\
 PermissableResource(子类)

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

允许的
-------------
身份PK
资源外键资源(resourceId)

我有另一个实体Resource,我想与之建立关联。它保存在这样的表中:

资源
-------------
资源 ID 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属性@OneToOne并指向它PermissableResource.class会起作用。如何在我的实体中保留超类引用,但将其映射到子类?

4

1 回答 1

0

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

于 2013-01-15T17:45:48.190 回答