考慮以下幾點:Hibernate/JPA Parent-Child - Parent equals()/ hashCode()可以使用數據庫ID嗎?
@Entity
public class Parent implements Serializable {
@Id
private Long id;
// mapped ManyToOne below...
private List<Child> children = new ArrayList<Child>();
...
}
它是一個不好的做法,有Parent.equals()和Parent.hashCode()只使用ID?據我所知,Child.equals()和Child.hashCode()應該使用一組不變屬性作爲「自然鍵」,以便它們能夠由Parent正確管理。但是,如果Parent始終是頂級對象(即,它永遠不是任何關聯的反面),使用唯一標識符有什麼問題嗎?
是否有任何不必要的影響可以通過這樣做表現出來?我猜測,也許如果我這樣做,當我添加一個孩子(或刪除),Hibernate將無法告訴父已經改變(並需要在數據庫中更新)?在這種情況下,我應該使用Parent.equals()和Parent.hashCode()的children屬性嗎?
我問,因爲在Hibernate文檔明確地說,不使用@Id屬性「自然鍵」 ......
我明白你在說什麼,但是從技術上講,如果id是零,那麼他們確實是相等的:他們都是未被執行的父對象。對於只有這兩個屬性(id和children)的上述示例,您如何建議實現equals()和hashCode()?我需要引入更多的屬性嗎? – GreenieMeanie 2009-05-27 19:08:22