簡體   English   中英

Hibernate中實體集合的陷阱

[英]pitfalls of collections of entities in Hibernate

OK,這是一個后續問題這一個 ,因為我現在真的混淆。

假設我在實體PersonEvent之間存在一對多或多對多關聯,因此Java中的Person類包含Set<Event> (讓我們忽略Event是包含單個Person還是Set<Person> 。)

Event s是存儲在數據庫中的實體,因此我可以更改事件字段。 什么是處理Event可變性且不會混淆Java Set <>身份檢查的正確方法? 在這種情況下,您決不應該重寫hashCode()和/或equals()嗎? (例如,身份=基於對象引用身份)

如果我希望對Event進行排序(例如,按事件開始時間排序),我該如何管理更改Event的字段? 一旦更改傳播到那里,數據庫將很好地處理它,但是在Java方面,這是否意味着要更改集合中的Event,我必須將其刪除,更改並重新插入? 還是沒有真正的方法可以在Hibernate映射的Java端維護排序順序? (因此,我必須將其視為無序的,因此每當我想獲取Event的排序列表時,都使用Java處理排序?)

編輯:糟糕,我剛剛在equals / hashCode上找到了這些討論:

這根本不是一個陷阱,它正在增強您告訴它所期望的語義。 真正的問題是“當我所謂的關鍵字段發生變化時,平等會發生什么”。 是的,它直接出了窗。 因此,是的,您最終可能會遇到這樣的情況,即有人根據您的鍵更改了集合中的一個字段,使其與另一個字段相等。 是的,您的業務邏輯需要處理。 更新事件對象時,必須確保新值不僅對字段有效,而且對於要放置它們的上下文也有效。在這種情況下,您將不允許更新事件對象重復現有事件。 在SQL中,此問題更為嚴重。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM