我觉得必须是一个常见问题:我有一个Communication
对象,用于描述与Person
进行通信的方式。当然,我在数据表中显示一个人Set<Communication>
的实例。我希望最终用户能够动态地添加和删除此表中的行。
两个对象通常根据其数据库PK使用equals()
和hashCode()
。 PK由postgresql序列生成(列为serial
类型)。这还不够,因为我只能用null
PK添加一个(瞬态)元素。
hibernate manual提供的唯一选择是在业务等效方面实现equals和hashCode。由于Communication对象基本上是一个美化的String
,这是不可能的。用户需要编辑对象的每个方面。
我考虑过创建一个序列服务,为瞬态实体“保留”id,并在创建时将其分配给对象。但我担心这会干扰Hibernate确定实体是否是瞬态的能力。
所以问题是:当我无法提供业务密钥时,是否有更好的选项来编辑,添加和删除瞬态对象?
答案 0 :(得分:0)
暂时忘掉休眠。您正在讨论向集合添加元素,并且它们根本没有标识,因为所有属性都可能被修改且它们没有标识符。那是错的。集合用于可识别的元素。使用列表或使元素可识别。您可以为它们分配一个时间ID或一个真实的数据库ID或其他什么,但问题不在于Hibernate,它与Set的概念有关。