我的事务服务中有一个方法可以验证对象并保存它。在此保存期间,假设由于“子”对象中的垃圾数据 - 抛出 DataException。
这是一个 RuntimeException,Hibernate 会触发回滚。这是我从日志中验证的,如下所示。
当我在 Action 中捕获异常时,我看到 Session 中的“子”对象有一个与之关联的标识符。为什么会这样?
当用户更正该值并尝试再次保存该对象并且休眠尝试更新该对象时会引发问题,这会引发 Batch update StaleStateException。
我找到了一个描述确切问题的博客http://www.jroller.com/hasant/entry/hibernate_saveorupdate_trap_for_web。有没有我缺少的解决方案?使用合并是出路吗?hibernate.use_identifier_rollback=true 会有帮助吗?
public @Component("action") @Scope("prototype") class Action {
private @Autowired Service service;
public void save() {
try {
A parent = new A();
B child = new B();
child.setValue(2782375983275837583758375); // Data Truncation will be thrown
service.save(parent, child);
} catch(Exception e) {
// Why does "child" have an id after rollback?
}
}
}
public @Service @Transactional(rollbackFor = Exception.class) class ServiceImpl implements …Run Code Online (Sandbox Code Playgroud)