我正在使用Eclipselink和Spring事务管理。我希望程序以原子方式插入两组主/详细记录,以便插入两者或两者都不插入。
现在,如果我的显式验证失败了结构,代码会抛出异常并回滚以处理它。处理第二条记录期间抛出的错误会回滚第一条记录。
当事情变成梨状时,在处理第二个事务时出现数据错误,导致在清除/提交过程中出现SQLException,在这种情况下,只有第二个记录似乎被回滚,第一个留在原地。
我尝试了各种调整。 SQLException通常在验证记录的过程中在查找调用期间触发,当生成flush()时,但我尝试更改EntityManger设置以关闭自动刷新,尽管抛出了不同的异常在程序的不同点,回滚仍然做同样的事情。
我已经尝试为更新引发错误的新事务,但系统说它不能在那时给我一个新的事务。
我已经尝试在事务结束之前进行刷新,希望捕获DatabaseException并转换为回滚的异常。
现在,我可以对验证更加挑剔,减少SQL上数据错误的可能性,但我更愿意保证不会丢失某些内容。我可以通过这种方式修复单元测试,但确实可以采用其他方式。
哦,将刷新模式设置为" COMMIT"确实有所作为。在这种情况下, 记录都不会回滚。即使我捕获PersistenceException并将rollback转换为异常。
答案 0 :(得分:0)
好吧,我偶然发现了一件事,只是随意改变了事情。从JTA翻转persistence.xml到RESOURCE_LOCAL。现在看起来很好。