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

时间:2014-09-18 04:17:15

标签: java hibernate-4.x

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

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

让我们考虑一下:

  1. 您的表名为'TestTable',主键为'id'(需要的键) 自动递增)。
  2. 您的模型类是'Test',它有一个字段 'id'映射到表'TestTable'的'id'列。
  3. 您可以使用以下方法实现您的目标:

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

答案 2 :(得分: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);

答案 3 :(得分: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);