3


フィールドにエンティティがあり@EmbeddedId、フィールドのアクセス タイプを上書きしてアクセスできるようにしましたProperty。しかし、これは によって無視されEclipseLinkますHibernate。問題ありません。また、Netbeans は次の理由でエラーを表示します:

クラスは一貫したアクセス タイプ (フィールドまたはプロパティ) を使用する必要があります。
このエンティティ階層には ID が定義されていません。

@EmbeddedId
private OneId id;

@Transient
private String cosmin;

@Access(AccessType.PROPERTY) // ??
public String getCosmin() {
    return cosmin;
}

public void setCosmin(String cosmin) {
    this.cosmin = cosmin;
}
4

1 に答える 1

5

問題は、エンティティが次のクラス レベルの注釈を欠いていることです。

@Access(AccessType.FIELD)

@Entity から次に追加するだけです。フィールドとメソッドの両方にアノテーションが付けられていると、実際に使用されるアクセス タイプがわかりません。あなたの場合、それはメソッドアクセスのようで、 @EmbeddedId は単に無視されます。

JPA 2.0仕様では、これは次の言葉で伝えられています。

Access アノテーションを明示的に指定せずにエンティティ階層内のフィールドとプロパティにアノテーションの配置を混在させるアプリケーションの動作は未定義です。
...
このようなクラスに Access(FIELD) を適用すると、クラス内の個々の属性を選択的に指定してプロパティ アクセスを行うことができます。持続性プロバイダー ランタイムによるアクセス用の持続性プロパティを指定するには、そのプロパティを Access(PROPERTY) に指定する必要があります。

.

于 2012-06-19T19:21:45.307 に答える