1

次のようなエンティティの単純なクラス階層があります。

可(スーパークラス)
\
 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。スーパークラスの参照をエンティティに保持しながら、それをサブクラスにマップするにはどうすればよいですか?

4

1 に答える 1

0

問題は、PermissableResourceあなたが@ManyToOne関係を定義したのに対し、Resourceクラスでは@OneToOne. 後者を に置き換えてみてください@OneToMany

于 2013-01-15T17:45:48.190 に答える