代码之家  ›  专栏  ›  技术社区  ›  muffytyrone

休眠删除问题

  •  0
  • muffytyrone  · 技术社区  · 16 年前

    我正在尝试编写一个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:
    

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

    任何帮助都将不胜感激。

    2 回复  |  直到 16 年前
        1
  •  0
  •   Justin    16 年前

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

    简而言之,使用纯JDBC Hibernate是执行此任务的错误工具。

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

    1. 重命名表旧表
    2. 新建空表
    3. 将数据导入新表
    4. 落差表

    您的整个表将被锁定在您的用例中,因此这不应该是一个问题。

        2
  •  0
  •   Pascal Thivent    16 年前

    第一个想法:你试过了吗? flush() 这个 Session 步骤2后?

    第二个想法:使用 the StatelessSession interface . 你可能需要延长 HibernateTemplate 因为那以后 SPR-6202 SPR-2495 尚未解决。