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
如何使用Hibernate(Java)复制记录?_Java_Hibernate - Fatal编程技术网

如何使用Hibernate(Java)复制记录?

如何使用Hibernate(Java)复制记录?,java,hibernate,Java,Hibernate,在同一个表中复制记录的最佳方式是什么 诸如此类: Address address = AddressDAO.get(id); address.setId(null); AddressDAO.add(address); 是的,应该行 我不确定hibernate是否没有检查对象引用,因此如果这不起作用,您可能需要创建一个新实例并复制所有属性(使用BeanUtils.copyProperties,甚至BeanUtils.cloneBean(…)),然后将ID设置为null/0 这是可行的,但最好是在

在同一个表中复制记录的最佳方式是什么

诸如此类:

Address address = AddressDAO.get(id);
address.setId(null);
AddressDAO.add(address);

是的,应该行


我不确定hibernate是否没有检查对象引用,因此如果这不起作用,您可能需要创建一个新实例并复制所有属性(使用
BeanUtils.copyProperties
,甚至
BeanUtils.cloneBean(…)
),然后将ID设置为null/0

这是可行的,但最好是在域模式下表达您的意图(克隆)。将字段设置为null只是一个实现细节,没有任何意义

Address address = AddressDAO.get(id);
Address clone = address.cloneMe();
AddressDAO.add(clone);

我建议你试试。如果
address
仍然是持久的(会话绑定),我会认为会出现问题。在将id设置为null之前,您可能需要一个
会话。退出(地址)

这不会生成深度副本…因此您的副本将引用原始对象的子对象。

在hibernate中对该对象使用级联退出

然后


我看到的问题是,如果address.cloneMe()只是将id设置为null,那么方法名就是一个谎言。单独调用它不会产生克隆,它仍然是同一个对象。它是一个克隆方法。原始对象不受影响。它返回一个新实例。您可以将其表示为复制构造函数,但我更喜欢(命名)方法的表达能力。
Address address = AddressDAO.get(id);
 AddressDAO.evict(address); //Internally session.evict(address);
address.setId(null); // If id is autogenerated
AddressDAO.add(address);