【发布时间】:2019-07-21 20:06:38
【问题描述】:
我有道层:
@Transactional
public class DatabaseCollectionDao implements IDatabaseCollectionDao {
@PersistenceContext
private EntityManager entityManager;
@Override
public void create(Collection collection) {
entityManager.persist(collection);
}
}
它工作正常但是:
- 当数据库不可用时,我有 SocketException。
- 当数据库包含重复键时,我有 SQLIntegrityConstraintViolationException
我正在尝试在 create 方法中try/catch:
@Override
public void create(Collection collection) {
try{
entityManager.persist(collection);
} catch (SQLIntegrityConstraintViolationException e){
//do smth
}
}
但 Intellij 说它从不抛出。
当我尝试尝试/捕获 Exception 时,我遇到了 UnexpectedRollbackException。
如何使用 JPA entityManager 处理异常?
更新:尝试删除 @Transactional 没有得到任何结果
附:可以肯定的是,我尝试在更高层尝试/捕捉它。我不知道我可以尝试更多来解决它。
【问题讨论】:
-
entity.persist(entity);- 这段代码正确吗? -
是的,它工作正常。但是当我停止 db 并尝试发送请求或再坚持一次时,这个实体(具有相同的 id)我遇到了这样的问题
-
也许你在想
Entitymanager::persist? docs.oracle.com/javaee/7/api/javax/persistence/… -
哦,对不起,当然。 entityManager.persist(entity);
-
请显示您的statcktrace的相关部分
标签: java spring spring-boot jpa exception