2017-08-10 8 views
1

SpringアプリケーションのRestコントローラの1つで、エンティティのインスタンスがdbからロードされ、そのフィールドがそのエンティティのsetXXメソッドを呼び出して変更されます。 dbに保存されます。Java Hibernate:フィールド設定後に自動的に保持する

setXXメソッドを呼び出すたびにデータベース内のこのインスタンスを自動的に更新できるかどうかは疑問です。私はそれが理想的ではないというパフォーマンス上の賢明さを知っていますが、場合によってはそれは私にとってはうまくいくでしょう。

編集1

これは私がエンティティのロード/セーブしていたテストコードです。

public CustomUserDetails createUser(String username, String name, String description, String imageId) { 
     User user = new User(); 
     user.setName(name); 
     user.setDescription(description); 
     user.setImageId(imageId); 
     CustomUserDetails userDetails = new CustomUserDetails(username, 
       DUMMY_PASSWORD, true, true, true, true, 
       AuthorityUtils.commaSeparatedStringToAuthorityList("ROLE_USER")); 
     userDetails.setUser(user); 
     userDetailsRepository.save(userDetails); 
     return userDetails; 
    } 

とテストで、私は、このメソッドから返された値に getUserを呼び出すことによって Userインスタンスを取得します:私は、DBへのユーザの詳細を保存するutilのクラスで、次のヘルパーメソッドを呼び出します。 I setXXいくつかの値が保持されていません。

+2

"Transactional"アノテーションを持つメソッド内から "setter"メソッドを呼び出す場合、エンティティは自動的にDatabaseに保存されます。 通常、サービス層で行います。 –

答えて

1

User user = new User(); 

コードの抜粋の添加に続いて、この管理対象エンティティではありません、あなたのフォローアップセッターを永続化するために呼び出すため..あなたがそれを保持および/またはDBから取得する必要があります(トランザクションはまだオンであると仮定します)。

限りエンティティは次に 永続/管理状態であるとして

as per the documentation

永続コンテキストがフラッシュされるときにすべての変更を自動的に検出し、永続化されます。特定の メソッドを呼び出して、変更を永続化する必要はありません。それはコメントだとして

はまた、スプリング内(従って永続/管理状態にある)エンティティをフェッチ@Transactional方法は、プロパティを永続化をもたらすであろうセッタープロパティ呼び出しによって直接続きます。

+0

私はトランザクションではないテストコード内でsetterメソッドを呼び出します。 –

+0

テスト中にエンティティをどのように取得していますか? – dimitrisli

+0

投稿に編集1を追加しました。 –

関連する問題