0

カテゴリに分けられたエンティティがあります。各エンティティは多くのカテゴリに属する​​ことができるので、私は1対多の関連付けを持っています。

以下で正しくORMされていますか?

@OneToMany
@Access(AccessType.FIELD)
private Set<Category> parents = new HashSet<Category>();
public Set<Category> getParents() {
    return parents;
}
public boolean addParent(Category parent) {
    return parents.add(parent);
}
public boolean removeParent(Category parent) {
    return parents.remove(parent);
}

私の具体的な質問は、@Accessアノテーションを使用する必要があるかどうかです。私がそれを使用しない場合、HibernateはgetParentsゲッターをマップしないことをどのように知るのでしょうか?

4

1 に答える 1

4

注釈が必要かどうかはわかりません。@Access(AccessType.FIELD)これはいくつかのデフォルトに依存するためです(以下を参照)。ただし、フィールドアクセスタイプ(デフォルトまたはによる@Access(AccessType.FIELD))を使用する場合、HibernateはFIELDに直接アクセスし、ゲッターまたはセッターを使用しません。

Hibernateリファレンスの5.1.4.1.2章を参照してください。アクセスタイプ決定アルゴリズムの詳細については、アクセスタイプ。

デフォルトでは、クラス階層のアクセスタイプは、@Idまたは@EmbeddedIdアノテーションの位置によって定義されます。これらの注釈がフィールド上にある場合、フィールドのみが永続性と見なされ、フィールドを介して状態にアクセスします。ゲッターに注釈がある場合、ゲッターのみが永続性と見なされ、ゲッター/セッターを介して状態にアクセスします。これは実際にはうまく機能し、推奨されるアプローチです。

于 2012-09-16T19:27:56.620 に答える