【发布时间】:2014-11-12 06:55:08
【问题描述】:
我想将一个表的记录复制到同一个表中(除了用以前的记录值保存新记录,这里主键将自动递增)那么如何在休眠中执行它(有没有像这样的直接方法session.save(Obj)),我使用的是 Hibernate 4.1.12。
【问题讨论】:
-
克隆并保存。或者更确切地说,使用自定义克隆方法并保存新对象。
标签: java hibernate-4.x
我想将一个表的记录复制到同一个表中(除了用以前的记录值保存新记录,这里主键将自动递增)那么如何在休眠中执行它(有没有像这样的直接方法session.save(Obj)),我使用的是 Hibernate 4.1.12。
【问题讨论】:
标签: java hibernate-4.x
您可以尝试将所有主键列设置为空,然后使用 Session.Save(obj)。
【讨论】:
evict 方法分离对象
让我们考虑一下:
您可以使用以下方法实现您的目标:
Test test = (Test) sessionFactory.getCurrentSession().createCriteria(Test.class).add(Restrictions.eq("id", id)).uniqueResult();
test.setId(null);
sessionFactory.getCurrentSession().saveOrUpdate(test);
【讨论】:
试试这个
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);
【讨论】:
您可以在保存新对象之前尝试逐出之前的对象。
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);
【讨论】: