Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何编辑、添加和删除集合中的临时实体?_Java_Hibernate - Fatal编程技术网

Java 如何编辑、添加和删除集合中的临时实体?

Java 如何编辑、添加和删除集合中的临时实体?,java,hibernate,Java,Hibernate,我有一个我觉得很常见的问题:我有一个沟通对象,它描述了与人沟通的方式。当然,我会在数据表中显示个人集合的实例。我希望最终用户能够在此表中动态添加和删除行 这两个对象通常根据其数据库PK使用equals和hashCode。PK由postgresql序列生成,列的类型为serial。这在这里是不够的,因为我只能添加一个具有null PK的瞬态元素 提供的唯一选项是根据业务等价性实现equals和hashCode。因为通信对象基本上是一个美化的字符串,所以这是不可能的。用户需要编辑对象的每个方面 我考

我有一个我觉得很常见的问题:我有一个沟通对象,它描述了与人沟通的方式。当然,我会在数据表中显示个人集合的实例。我希望最终用户能够在此表中动态添加和删除行

这两个对象通常根据其数据库PK使用equals和hashCode。PK由postgresql序列生成,列的类型为serial。这在这里是不够的,因为我只能添加一个具有null PK的瞬态元素

提供的唯一选项是根据业务等价性实现equals和hashCode。因为通信对象基本上是一个美化的字符串,所以这是不可能的。用户需要编辑对象的每个方面

我考虑过创建一个序列服务,它为瞬态实体保留一个id,并在创建时将其分配给对象。但我担心这会干扰Hibernate判断实体是否是瞬态的能力


所以问题是:当我无法提供业务密钥时,是否有更好的选项来编辑、添加和删除临时对象?

暂时忘记hibernate。您正在谈论将元素添加到集合中,但它们根本没有标识,因为所有属性都可能被修改,并且它们没有标识符。这是错误的。集合用于可识别的元素。使用列表或使元素可识别。您可以为它们分配一个临时ID或一个真实的数据库ID或其他任何东西,但问题不在于Hibernate,而是关于集合的概念。

这就是为什么我说一个解决方案是在它们最终持久化之前获取一个序列值,并将其分配给对象。如果Hibernate允许的话,我会继续的。但是,你可能是对的,在这里,@OrderColumn是更好的选择。