2016-05-20 10 views
0

Spring Data JPAのJpaRepositoryメソッドを使用してエンティティを取得した後、 findOnefindBy...など、いくつかの一時的なフィールドを初期化するために、カスタムコードを自動的に実行する最善の方法は何でしょうか。言い換えればSpring Data JPA - 検索後に一時フィールドを設定する方法

は、私が何をすべき、データベースから取り出した後firstNamelastNameの連結として設定する必要がありますfullName過渡場、とUserエンティティがあると?

答えて

2

まず、完全名であれば、ただちにforename/surnameを連結するメソッドを作成します。フィールドである必要はありません。

あなたが本当に@PostLoadエンティティのライフサイクルコールバックを登録し、その後、エンティティの負荷に何らかの処理を行う必要がある場合:

public class MyEntity{ 

    @PostLoad 
    //invoked by framework on entity load. 
    public void doStuff(){ 
     fullName = forename + " " + surname; 
    } 

    //alternative 
    public String getFullName(){ 
     return forename + " " + surname; 
    } 

https://en.wikibooks.org/wiki/Java_Persistence/Advanced_Topics#Example_of_Entity_event_annotations

+0

ありがとう、@PostLoadはうまくいきます。 fullNameは単なる例でした - 私はそれをより長い初期化に使用したいと思います。 – Sanjay

0

@Access(AccessType.Property)を使用すると、過渡フィールドを理想的に設定できます。

セッターメソッドでは通常@Access(AccessType.Property)と言いますが、そのセッターメソッドでその一時フィールドの値を設定することができます。

また、リポジトリの場合は、JPQLと書くことができます。

@query( "WHERE t.value =こんにちはからの新しいこんにちは(斧* AY、AX、AY)SELECT:値を")

をして、コンストラクタでこのtransient variablea.x*a.yとの値を設定します

1

は自分自身を試していないが、@PostLoad注釈がにあなたを助けるかもしれないと思われますビジネスオブジェクトをデータベースから取得した後にビジネスオブジェクトの状態を変更するコードを実行します。

具体的には、beanに値を格納せずにfirstNameとsecondNameを連結するgetFullNameメソッドを作成するだけです。

関連する問題