Hibernate删除问题

时间:2010-05-07 03:59:42

标签: mysql hibernate spring transactions

我正在尝试编写一个导入数据文件的Java应用程序。过程如下

  1. 创建交易
  2. 从数据表中删除所有行
  3. 将数据文件加载到datatable
  4. 如果遇到任何错误,则提交或回滚。
  5. 步骤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:
    

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

    任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

最短的答案,请使用session.merge()

简短回答,使用普通的jdbc hibernate是这项工作的错误工具。

更长的答案,看看你的数据库工具在这方面支持什么 解决方案可能是:

  1. 重命名表old_table
  2. 创建一个新的空表
  3. 将数据导入新表
  4. drop old_table
  5. 您的整个表格将被锁定在您的用例中,因此这应该不是问题。

答案 1 :(得分:0)

第一个想法:您是否在第2步之后尝试flush() Session

第二个想法:使用the StatelessSession interface。由于SPR-6202SPR-2495尚未解决,您可能需要延长HibernateTemplate