注釈を@Formula
使用して、計算されたプロパティを取得するために使用しました。私が必要とするのは、注釈で@Formula
注釈が付けられたフィールド/ゲッターを遅延ロードする必要があることです。
これは可能ですか?
ありがとう
注釈を@Formula
使用して、計算されたプロパティを取得するために使用しました。私が必要とするのは、注釈で@Formula
注釈が付けられたフィールド/ゲッターを遅延ロードする必要があることです。
これは可能ですか?
ありがとう
はい 。@Basic(fetch=FetchType.LAZY)@Formula
によってプロパティのフィールド/ゲッターに注釈を付け、 hibernate によって提供されるこのant タスクを使用して、エンティティ クラスのバイトコード計測を行います。それ以外の場合、プロパティの LAZY 読み込みは黙って無視されます。@Formula
ドキュメントには、このant タスクを使用してバイトコードの計測を行う方法に関する情報が含まれています。
コメントで、バイトコード計測なしでこれを達成したいということを見ました。これは、FieldHandled
インターフェイスを実装し、遅延フィールドのゲッターとセッターを変更することで実現できます。
HBM
<property name="deletable" type="true_false" lazy="true">
<formula>(select something from other tables and such....)</formula>
</property>
ジャワ
import org.hibernate.bytecode.javassist.FieldHandled;
import org.hibernate.bytecode.javassist.FieldHandler;
public class Person implements FieldHandled {
/* allows lazy formulas without hibernate bytecode instrumentation */
private FieldHandler fieldHandler;
public FieldHandler getFieldHandler() { return fieldHandler; }
public void setFieldHandler(FieldHandler fieldHandler) { this.fieldHandler = fieldHandler; }
private Boolean deletable;
public void setDeletable(Boolean deletable) {
if(fieldHandler!=null)
fieldHandler.writeObject(this, "deletable", this.deletable, deletable);
this.deletable = deletable;
}
public Boolean getDeletable() {
if(fieldHandler!=null)
return (Boolean)fieldHandler.readObject(this, "deletable", deletable);
return deletable;
}
}
別の例はここにあります。しかし、それは 1 対 1 の関係を遅延読み込みします。