【发布时间】:2014-03-12 16:00:43
【问题描述】:
我的服务类中有以下代码。作为功能的一部分,此代码被两种不同的方法调用两次。
//Some code here...
LOG.info("###Inside customer interceptor");
try
{
customerDao.save(customer);
}
catch (final Exception exp)
{
//some code here too...
}
当第一次从第一个方法调用并执行时,我可以看到在tomcat控制台中打印了一条select SQL语句,但是没有我预期的更新SQL语句(可能是因为Hibernate没有'不要立即发出插入/更新)。 立即从第二种方法再次调用此代码块时,我在 tomcat 控制台中看到一条 SQL 选择语句,然后是一条 SQL 更新语句,然后立即看到一个大胖 org.hibernate.NonUniqueObjectException。 据我所知,这是因为早期的实体仍然附加到会话而不是提交给数据库。
但是,当我去查看数据库时,我发现保存在数据库中的值是第一次调用的对象,而不是我预期的第二个对象。这是正常的还是我在这里遗漏了什么?
我正在使用 Spring 的注解(@Transactional)驱动的事务策略。
【问题讨论】:
标签: java spring hibernate spring-transactions