Учитывая следующее:
@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 всегда является объектом верхнего уровня (т.е. это никогда не обратная сторона какой-либо ассоциации), есть ли что-то не так с использованием только id?
Есть ли какие-либо нежелательные эффекты, которые могут проявиться при этом? Я предполагаю, что, может быть, если я сделаю это, то, когда я добавлю дочерний элемент (или удалим), Hibernate не сможет сказать, что родитель изменился (и должен быть обновлен в БД)? В этом случае я должен использовать свойство children для Parent.equals () и Parent.hashCode ()?
Я спрашиваю, потому что в документах Hibernate говорится, что не следует использовать свойство @Id для «естественного ключа» ...