2010-05-07 131 views
0

我正在尝试编写导入数据文件的Java应用程序。该过程如下休眠删除问题

  1. 创建事务
  2. 删除数据表
  3. 加载数据文件中的所有行到数据表
  4. 提交或遇到回滚任何错误。

步骤3中加载的数据大部分与步骤3中删除的数据相同。

使用以下

DetachedCriteria criteria = DetachedCriteria.forClass(myObject.class); 
List<myObject> myObjects = hibernateTemplate.findByCriteria(criteria); 
hibernateTemplate.deleteAll(myObjects); 

当我然后加载数据文件,我得到下面的异常

nested exception is org.hibernate.NonUniqueObjectException: 
a different object with the same identifier value was already associated with the session: 

整个过程需要发生在交易进行删除。 而且我并不想要比较导入文件/数据表,然后执行插入/更新/删除以使它们同步。

任何帮助,将不胜感激。

回答

0

简短的回答,请session.merge()

简短的回答,请使用普通JDBC Hibernate是这个职位的错误的工具。

更长的答案,看看你的数据库工具在这方面的支持。
一个解决办法是:

  1. 重命名表OLD_TABLE
  2. 创建一个新的空表
  3. 将数据导入到新表
  4. 下降OLD_TABLE

你的整个表会被锁定在你的用例中,所以这应该不成问题。

+0

可能是最简单的解决方案。不幸的是,我们使用的db账户只有更新/插入/删除权限。我可能必须使用nsert/update/delete而不是drop all ... ta – muffytyrone 2010-05-11 06:02:38