次のようなエンティティの単純なクラス階層があります。
可(スーパークラス) \ PermissableResource (サブクラス)
それらは次のようにテーブルに永続化されます。
許される ------------- IDPK リソース FK リソース (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
。スーパークラスの参照をエンティティに保持しながら、それをサブクラスにマップするにはどうすればよいですか?