實體超級I類有實體的,像這樣一個簡單的類層次結構:創建關聯使用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;
問題附帶了資源類。我想參考超類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
並將其指向PermissableResource.class
這可以起作用。我如何在我的實體中保留超類參考,但將其映射到子類?
如果'Permissable'可以是抽象的,[inheritance](http://en.wikibooks.org/wiki/Java_Persistence/Inheritance)是我建議的選項。 – perissf