hibernate - 使用 Hibernate 在 EJB 中使用容器管理事务处理异常
问题描述
我在使用容器管理事务在 EJB 中捕获休眠异常时遇到问题。
package com.somepackage;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Stateless
@TransactionAttribute(TransactionAttributeType.NEVER)
public class MyBusiness {
@EJB
Archiver archiver;
public void doSomething(Request request) {
try {
Response response = new Response();
archiver.archive(request, response);
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public class Archiver {
@EJB
private RequestManager requestManager;
@EJB
private ResponseManager responseManager;
public void archive(Request request, Response response) {
try {
requestManager.create(request);
responseManager.create(response);
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class ResponseManager {
@PersistenceContext(unitName = "datasource")
private EntityManager entityManager;
public void create(Response response) {
try {
entityManager.persist(response);
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class RequestManager {
@PersistenceContext(unitName = "datasource")
private EntityManager entityManager;
public void create(Request request) {
try {
entityManager.persist(request);
} catch (Exception e) {
e.printStackTrace();
}
}
}
问题是我无法捕获 ConstraintViolationException 等异常。虽然我可以在 Weblogic 控制台中看到错误日志,但我的捕获仅报告事务回滚,仅此而已。
//控制台日志
2019 年 5 月 13 日上午 10:58:09 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions 警告:SQL 错误:1400,SQLState:23000 2019 年 5 月 13 日上午 10:58:09 org.hibernate.engine.jdbc。 spi.SqlExceptionHelper logExceptions 错误:ORA-01400:无法将 NULL 插入(“SCHEMA”。“REQUEST”。“REF_EXCEPTION_ID”)
////日志到此结束
任何帮助,将不胜感激。
解决方案
我只需要在我的 Weblogic Env 中设置它。
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dweblogic.transaction.allowOverrideSetRollbackReason=true
推荐阅读
- swift - 我正在尝试从 json 文件中提取数据并将该数据写入变量
- javascript - 逐一启用html表单字段
- javascript - 如何在动态html表格中实现分页
- javascript - 我想要两个 mysql 表加入 group_concat 结果在 json 数组
- java - Spark Structured Streaming - 在有状态的流处理中使用窗口操作进行事件处理
- nlp - 带有句子的未知标记
- amazon-web-services - fluentd 无法连接到 elasticsearch SSL_connect 返回=1 errno=0 state=error: 错误的版本号 (OpenSSL::SSL::SSLError)
- wix3.5 - 如何在 wix 工具集中杀死受保护的进程
- python - 打印 Tensorflow 网络中每一层的层形状摘要
- c# - 我无法在 Unity 2D 中生成新对象