21

この質問は本質的にこの質問の反対です。

私は次のような方法を持っています:

public boolean isVacant() {
    return getEmployeeNum() != null && getEmployeeNum().equals("00000000");
}

ロードすると、Hibernate は という属性がないと不平を言っていますvacant。しかし、呼び出される属性はvacant必要ありません。そのデータを保存する必要はありません。これは単なるロジックです。

休止状態 言います:

org.hibernate.PropertyNotFoundException: クラス com.mycomp.myclass のプロパティ vacant のセッターが見つかりませんでした...

isVacant()Hibernate に無視させるためにメソッドに追加できる注釈はありますか?

4

3 に答える 3

42

メソッドに追加@Transientすると、Hibernate はそれを無視する必要があります。

Hibernate Documentationを引用するには:

エンティティのすべての非静的で非一時的なプロパティ (アクセス タイプに応じてフィールドまたはメソッド) は、 として注釈を付けない限り、永続的と見なされ@Transientます。

于 2012-09-10T20:58:18.530 に答える
3

RNJ は正しいですが、なぜこれが起こるのかを追加するかもしれません:

永続クラスのゲッターに注釈を付けたと思います。Java Bean で使用されるプレフィックスは「set」と「get」で、変数の読み取りと書き込みに使用されますが、ブール値に使用されるプレフィックス「is」もあります (「get」の代わりに)。Hibernate は、getter アノテーションが付けられた永続クラスを認識し、"isVacant" メソッドを見つけると、プロパティ "vacant" があると想定し、"set" メソッドもあると想定します。

したがって、これを修正するには、@Transient アノテーションを追加するか、メソッドの名前を「is」で始まらない名前に変更します。get メソッドではなくフィールドでクラスに注釈が付けられていれば、これは問題にはならないと思います。

于 2012-09-10T21:04:46.033 に答える