[英]pitfalls of collections of entities in Hibernate
OK,這是一個后續問題這一個 ,因為我現在真的混淆。
假設我在實體Person
和Event
之間存在一對多或多對多關聯,因此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.