我的問題是關於休眠 - 所以說你有兩個對象,你正在排隊保存到你的數據庫。這些對象對於每個字段具有完全相同的值。我的hibernate被配置爲在50次查詢後自動刷新,因此讓我們假設它在通過休眠會話後不會立即將這些對象刷新到數據庫。休眠是否將每個對象作爲不同的實體保存到數據庫中(這樣它會將重複記錄保存爲「獨特」記錄),或者是否確認這些對象具有完全相同的值,並且只保存這些鏡像對象的一個實例數據庫?休眠的細微差別會話
回答
是否最終在數據庫中有一個或兩個實體取決於equals()(和hashcode,分別)的實現。如果對象被認爲是平等的,你最終會得到一個實體,但如果不是,你最終會得到兩個實體。
使用自動生成的代理鍵時必須格外小心:在第一次保存對象之前,尚未分配鍵。因此任何equals()實現都不能依賴關鍵的等式。您必須確保您處理這種特殊情況 。
我的問題是關於休眠 - 所以說你有兩個對象, 你排隊保存到你的數據庫。
讓我們來重述一下 - 我們有兩個我們想要在數據庫中持久化的實體。
這些對象對於每個字段具有完全相同的值。
在Java中,有一個由equals
(和hashcode
)實現的對象標識。在數據庫中有行標識 - 標識唯一行的主鍵(轉換爲唯一實例)。由於我們將實體的實例映射到表中,因此區分同一類(同一實體)的兩個實例的方法是爲每個實例提供唯一的主鍵。在JPA(Hibernate是JPA的實現)中,您需要使用@Id
註釋來註釋字段(Entity的屬性),例如它可以被唯一標識。
下面的類是具有唯一標識的實體類。
@Entity
public MyClass
@Id
@GeneratedValue
private Long id;
你可以提供一個唯一的ID每次持續時間,或者你可以使用自動生成與@GeneratedValue
。根據底層數據庫有不同的生成策略。
是的,我理解並完成了這一切。他們有一個Id對象字段,使用JPA註釋進行註釋。我讓休眠處理id創建,因爲它由序列數據庫端填充。但是我失去了記錄,它們不復存在 – Daniel
請提供更多信息,您如何堅持以及如何控制交易。我剛剛提供了這些信息來表明Java身份對JPA無關緊要,它具有自己的身份認識。 – fg78nc
AOP Spring事務管理,保存對象的方法用帶有可序列化隔離級別的@Transactional標籤進行註釋。我使用的是Spring Data JPA,所以我甚至沒有管理對象何時會存在,如果我的理解是正確的,那麼這個功能就會從我這裏抽象出來 - 我用JPA存儲庫保存對象。 – Daniel
- 1. TransactionScope細微差別
- 2. 休眠會話
- 3. 細微的差別解決
- 4. [N]休眠會話
- 5. 休眠會話工廠Android
- 6. JMS與休眠會話
- 7. 休眠會話範圍
- 8. 休眠會話關閉
- 9. SEAM /休眠:一個會話
- 10. 休眠會話線程
- 11. 休眠4會話log4j
- 12. 管理休眠會話
- 13. 休眠會話處理
- 14. 休眠會話錯誤
- 15. EntityManager和休眠會話
- 16. Vaadin休眠會話錯誤
- 17. 休眠會話和標準
- 18. 休眠:從合併會話
- 19. 休眠@交易會話
- 20. 批量Grails休眠會話
- 21. 使用fprintf時的細微差別
- 22. C和C++之間的細微差別
- 23. 排序命令的細微差別
- 24. 兩個ALTER語句的細微差別
- 25. Firefox和Chrome中XMLSerializer的細微差別?
- 26. CF_SQL_DECIMAL和CF_SQL_NUMERIC之間的細微差別
- 27. 查詢之間的細微差別?
- 28. 浮點精度細微差別
- 29. Haskell類型系統細微差別
- 30. 休眠:GenericGenerator詳細
他們有一個Id字段,它們的值是什麼? –
id字段是由hibernate生成和處理的序列。字段值是clobs和字符串。 – Daniel
保存時間的值是多少? –