如何用新的主键复制hibernate中的记录?

问题描述 投票:0回答:4

我想将一个表的记录复制到同一个表中(除了用以前的记录值保存新记录,这里主键会自动递增)所以如何在hibernate中执行它(有没有像session.save这样的直接方法) (Obj))我正在使用Hibernate 4.1.12。

java hibernate-4.x
4个回答
0
投票

您可以尝试将所有主键列设为null,然后尝试使用Session.Save(obj)。


0
投票

让我们考虑一下:

  1. 您的表名为'TestTable',主键为'id'(需要自动递增的键)。
  2. 您的模型类是'Test',其字段'id'映射到表'TestTable'的'id'列。

您可以使用以下方法实现您的目标:

Test  test  = (Test) sessionFactory.getCurrentSession().createCriteria(Test.class).add(Restrictions.eq("id", id)).uniqueResult();
test.setId(null);
sessionFactory.getCurrentSession().saveOrUpdate(test);

0
投票

试试这个

Test  test  = (Test) sessionFactory.getCurrentSession().createCriteria(Test.class).add(Restrictions.eq("id", id)).uniqueResult();
Test t=new Test();
t.setName(test.getName());
t.setAge(test.getAge());
sessionFactory.getCurrentSession().save(t);

或者,如果您的表已创建日期或修改日期字段,则更改该两个值并保存。

Test  test  = (Test) sessionFactory.getCurrentSession().createCriteria(Test.class).add(Restrictions.eq("id", id)).uniqueResult();
test.setCreatedDate(new Date());
sessionFactory.getCurrentSession().save(test);

0
投票

您可以在保存新对象之前尝试逐出前一个对象。

Test  test  = (Test) sessionFactory.getCurrentSession().createCriteria(Test.class).add(Restrictions.eq("id", id)).uniqueResult();
sessionFactory.getCurrentSession().evict(test);
test.setId(1);
sessionFactory.getCurrentSession().save(test);
© www.soinside.com 2019 - 2024. All rights reserved.