2016-09-02 19 views
2

エンティティに永続プロパティAがあり、2つの一時フィールドT1,があるとします。エンティティが永続化されている場合、T1T2に基づいてAを計算する必要があります(これは変更できない従来のデータベースと仮定します)。一時的なプロパティに基づいて永続プロパティを計算する方法

@Entity 
Class MyEntity { 
    @Column(name="persistantA") 
    Integer A; 

    @Transient 
    Integer T1; 

    @Transient 
    Integer T2; 

    @PrePersist 
    void prePersist() { 
     A = T1 * T2; 
    } 
} 

しかしprePersist()メソッド内のすべてのtransientのフィールドは、それらが初期値に設定されている---クリア---これは、Hibernate/JPAのための適切な行動であるように思われています。

これを解決するにはどうすればよいですか?

私はJpaとHibernateでSpringブートを使用しています。

答えて

1

EntityManager::persistを呼び出して新しいエンティティを保持すると、記述する動作は行われず、@PrePersistメソッドで一時的なフィールドが表示されます。

EntityManager::mergeで新しいエンティティを永続化すると、マージメカニズムは一時的なフィールドを無視します。これは予想される動作です.Hibernateが認識しているプロパティのみがマージされます。 mergeは常に引数が管理されたインスタンスである場合を除いてコピーを返しますので、手動でmerge操作の結果に一時フィールドをコピーする必要があります。

+0

あなたは正しいです。しかし、私はpersit()とmerget()の両方の変換を実行したい。私は最後にsetterメソッドでtransform関数を呼び出すことでこの問題を解決しました。 – xing

関連する問題