16

注釈を@Formula使用して、計算されたプロパティを取得するために使用しました。私が必要とするのは、注釈で@Formula注釈が付けられたフィールド/ゲッターを遅延ロードする必要があることです。

これは可能ですか?

ありがとう

4

3 に答える 3

9

はい 。@Basic(fetch=FetchType.LAZY)@Formulaによってプロパティのフィールド/ゲッターに注釈を付け、 hibernate によって提供されるこのant タスクを使用して、エンティティ クラスのバイトコード計測を行います。それ以外の場合、プロパティの LAZY 読み込みは黙って無視されます。@Formula

ドキュメントには、このant タスクを使用してバイトコードの計測を行う方法に関する情報が含まれています。

于 2012-04-09T10:38:49.133 に答える
4

コメントで、バイトコード計測なしでこれを達成したいということを見ました。これは、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 の関係を遅延読み込みします。

于 2013-09-12T13:56:04.317 に答える