我有一个简单的类实体层次结构,如:
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
,这将起作用。如何在我的实体中保留超类引用,但将其映射到子类?
答案 0 :(得分:0)
我认为问题在于PermissableResource
您定义了@ManyToOne
关系,而在Resource
类中您定义了@OneToOne
。尝试用@OneToMany
代替后者。