CannotAcquireLockException / DuplicateKeyException

时间:2017-02-24 09:24:10

标签: java sql hibernate

我有以下情况:

  1. 包含两列内部和外部ID的表
  2. 对我的服务的请求始终具有外部标识,如果尚未设置内部标识(无状态),则调用该服务并尝试查找匹配的内部标识。
  3. 如果找到条目,则在实体中设置内部标识。
  4. 如果没有调用ID-Service的条目提供新的唯一ID(框架解决方案,实际上无法触及),则新条目将被保留。
  5. 如果我运行测试链,我会从hibernate中随机获取CannotAcquireLockExceptions和DuplicateKeyExceptions。似乎存在死锁以及两个事务都在寻找条目而没有找到它并且在第二个事务试图为唯一密钥外部id持久保留新条目时崩溃的情况。

    我对如何解决这个问题感到很遗憾。非常感谢任何想法。

    /编辑:显示我所做的一些代码:

    Integer idInt = mapExtToInt(idExt); // select

    if (idInt == null) {

        idInt = callIdService(); // get id from id service
    
        createIntExtMapping(idInt, idExt); // save
    

    }

    当然可以有几个使用相同idExt的测试。

    / Edit2:我设法让它不那么经常发生,但问题仍然存在。在执行此测试类中的下一个事务之前,我在每个事务(传播= REQUIRES_NEW)之后添加了一个flush。任何意见都非常感谢。

0 个答案:

没有答案