【发布时间】:2013-01-15 16:30:54
【问题描述】:
我有一个简单的实体类层次结构,如下所示:
允许的(超类) \ PermissableResource(子类)它们被保存在一个表格中,如下所示:
允许的 ------------- 身份PK 资源外键资源(resourceId)我有另一个名为Resource 的实体,我想与之建立关联。它被保存在这样的表中:
在我的 PermissableResource 类中,我这样创建关联:
@JoinColumn(name="resource", referencedColumnName="resourceId")
@ManyToOne
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 中
我认为既然我使用了@OneToOne 的targetEntity 属性并将其指向PermissableResource.class,这将起作用。如何在我的实体中保留超类引用,但将其映射到子类?
【问题讨论】:
-
如果
Permissable可以是抽象的,inheritance 是我建议的选项。
标签: java jakarta-ee jpa