JPAセーブ()オブジェクトを返してそのオブジェクトのデータベース内のIDを返す解決方法(親測有効)


転載先:spring data jpa save問題
Springdatajpaは使いやすいツールですが!まず、今日の午後にspring-data-jpaの問題カードで少し長くかかります.MySQLでidを増やしたいので、saveの後にこの保存したエンティティのidを取得して後続の仕事をしたいと思っていました.springdatajpaのsaveメソッドの実行が終わった後、save(entity)のentityが自動的に保存のentityに更新されると思っていましたが、実はそうではありません.今日intellijのdebugツールでコードを追跡して、saveを発見した後にこの実体のidはいつも0で、このようにsaveで返したentityのidはいつも行くべきでしょう、変えた後にsaveが返したentityのidも0であることを発見して、これはとても気まずいインターネットのグーグルを利用して、saveの後でflushがこのrepositoryを少し見ると言って、しかし、試してみるとグーグルを続ける卵はありませんでした.springdatajpaの穴を見つけました.springdatajpaは実はhibernateの比較的高級なパッケージライブラリで、もっと使いやすいですが、底層はhibernateで実現されています.save方法はhibernateの持続化方法で、保存されたエンティティに自動的に戻ることはありません.では、この保存されたエンティティをどのように取得しますか?
//      Id   ,   Id   getter   
 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 private int id;

@GeneratedValue(strategy = GenerationType.IDENTITY)
public String getId(){
	return id;
}

この言葉を付けなければ、spring data jpaはあなたがこの保存後のエンティティを手に入れたいことを知ってから、このエンティティに戻って自増idを手に入れたい列に@GeneratedValueを加えると、spring data jpaはこのエンティティを保存し、転送されたエンティティを保存後のエンティティに更新します(実はhibernateが戻ったのではないかと思います)、そうすれば、save(xxx)後、xxxは保存済みエンティティに更新されました
Spring-data-jpaの穴、記録メモ