1

私はプロジェクトを JPA から Hibernate のネイティブ実装に移行しました (チームによって投票されました :<)。

私が対処しなければならないすばらしいことの 1 つは、@PostLoad が Hibernate ネイティブ ライブラリで機能しないことです。だから私は少しググった。

最初に EventListeners を調べました -> いいえ、Configuration クラスでは設定できなくなったようです。そして、それをcfgファイルに挿入したとき、リスナーはまだ動作を拒否しています。

オーケー、次にインターセプターを調べた -> いいえ、ポストロードはありません。インスタンス化もオブジェクト自体を渡しません。なんて都合のいい。

そして最後に、LifeCycle を調べました -> そうです、onLoad() がありますが、Session と Serializable Id を渡しますが、オブジェクトは渡されません。良い。

とにかく、私が欲しいのは、onPostLoad(Object object, yadda yadda yadda) というハンドラー関数でポストロードをリッスンするものだけです。誰か良い提案がありますか?

4

2 に答える 2

0

一般的に、質問しているバージョンに名前を付けるのは良い考えです...

EventListeners -> いいえ、Configuration クラスでは設定できなくなったようです

だからあなたは4.xを使っていると思いますか?4.x では、EventListeners は Hibernate 4 で追加されたサービス インフラストラクチャの一部です

于 2012-10-05T01:00:22.290 に答える
0

インターセプターにはonLoad()メソッドがあります。あなたはそれをチェックしましたか?その署名は次のようになります。

@Override
public boolean onLoad(Object entity, Serializable id, Object[] state,
        String[] propertyNames, Type[] types) {
    // TODO Auto-generated method stub
    return super.onLoad(entity, id, state, propertyNames, types);
}

エンティティのプロパティを変更する場合は true を返す必要があり、それ以外の場合は false を返す必要があることに注意してください (たとえば、単にエンティティをカウントしているとします)。

Spring を使用している場合は、インターセプターを次のように配線します。

<bean id="sessionFactory"       class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="entityInterceptor">
        <bean class="my.company.MyInterceptor"/>
    </property>
</bean>
于 2012-10-04T22:57:26.470 に答える