如何从提交的catch子句中的entitymanager中删除命令?我尝试删除实体并使用查询从数据库重新加载它,但这不起作用
当前代码:
book.setAmount(book.getAmount()-1);
EntityTransaction transaction = this.entityManager.getTransaction();
transaction.begin();
try{
this.entityManager.merge(book);
transaction.commit();
catch(RollbackException re){
// TODO: remove the failed statemeant somehow
}
谢谢,巴斯蒂
答案 0 :(得分:0)
问题在于,在您的事务中,您的操作失败而其他操作失败(不清楚哪些其他操作正在尝试提交,因为我们在事务之前没有看到其他代码被执行)。使用JPA,您无权访问JPA将要执行的操作列表,而是通过在不同事务中执行不同的操作来控制所提交的内容。因此,您可以做的只是尝试在另一个事务中执行EntityManager.merge()
(在该事务之前,创建新的EntityManager
或调用EntityManager.clear()
)。
另外请注意,强烈建议(至少使用Hibernate)抛出/垃圾收集抛出异常的EntityManager
,所以不要在异常之后重复使用它。
PS:如我所见,您使用的交易类型为RESOURCE_LOCAL
的EntityManager。