我的問題涉及持久化后類物件的 id 欄位填充。此類示例下方的示例問題
@Entity
class SomeEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
...
}
假設我想像這樣堅持新物體來回購:
SomeEntity entity = new SomeEntity(someArgs);
someEntityRepository.save(entity);
問題是 - 如果我想使用資料庫中自動生成的 id 欄位,我是否必須再次提取此物體:
SomeEntity foundEntity = someEntitiyRepository.findTheEntitySomehow(someargs);
System.out.println(foundEntity.getId());
或者我可以直接使用它?
// Copy code from above
SomeEntity entity = new SomeEntity(someArgs);
someEntityRepository.save(entity);
System.out.println(entity.getId());
uj5u.com熱心網友回復:
當您使用存盤庫保存方法時,Hibernate 不會將新記錄發送到資料庫,直到執行任何重繪 操作(如關閉持久背景關系或呼叫 JPQL 陳述句)。
為確保您有一個 id,您必須手動呼叫重繪 。它可以在任何存盤庫上呼叫,并且所有持久背景關系都將被重繪 。也saveAndFlush()可以使用存盤庫方法。
SomeEntity entity = new SomeEntity(someArgs);
someEntityRepository.saveAndFlush(entity);
System.out.println(entity.getId());
SomeEntity entity = new SomeEntity(someArgs);
someEntityRepository.save(entity);
someEntityRepository.flush();
System.out.println(entity.getId());
請記住save(),如果您沒有打開的事務(帶有@Transactional注釋),則僅呼叫方法也可以。因為save()方法將使用 own@Transactional來打開和關閉持久化背景關系本身。
SomeEntity entity = new SomeEntity(someArgs);
someEntityRepository.save(entity);
System.out.println(entity.getId());
uj5u.com熱心網友回復:
SomeEntity entity = new SomeEntity(someArgs);
SomeEntity saved= someEntityRepository.save(entity);
Syster.out.println(saved.getId());
每當我們嘗試使用 Id 時,狀態將變為持久狀態并獲取 Id 值。我們需要使用存盤庫回傳物件中的 Id 值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/449447.html
