2016-07-05 11 views
-2

は、私は同じコードの2つのバージョンを持って(私は仮定):春・データJpaRepositoryオプションorElse重複エンティティ

Optional<UserHolder> user = userHolderRepository.findOneByUserId(source.getId()); 
return user.isPresent() 
    ? user.get() 
    : userHolderRepository.save(new UserHolder(source.getId(), source.getLogin())); 

UserHolder userHolder = userHolderRepository 
      .findOneByUserId(source.getId()) 
      .orElse(userHolderRepository.save(new UserHolder(source.getId(), source.getLogin()))); 

     return userHolder; 

は私も@ManyToOne userHoldersでMessage実体を得ました。

上記のコードを呼び出してユーザーホルダー(存在する場合は作成するか、代わりに作成する)を呼び出すと、最初のスニペットはうまく機能し、2番目のスニペットは常に同じIDを持つ2番目のuserHolderを作成します。

コードスニペットは同じ動作をしていないと思いますが、Optionalスタイルコードを最初のスニペットとまったく同じにするにはどうすればよいですか?

ありがとうございます!

答えて

0

これを解決するための適切なソリューションは、理由説明here

UserHolder userHolder = userHolderRepository 
      .findOneByUserId(source.getId()) 
      .orElseGet(() ->userHolderRepository.save(new UserHolder(source.getId(), source.getLogin()))); 

     return userHolder; 

ある、orElseは常にOptional値を含む場合でも、オブジェクトを生成しています。

関連する問題