在 Dropwizard 中处理托管 Hibernate DAO 异常
Handling managed Hibernate DAO exceptions in Dropwizard
我在使用 Dropwizard 时遇到问题,我无法捕获资源中 Hibernate DAO 对象抛出的异常。
我有以下 DAO 对象
public class ApplicantDAO extends AbstractDAO<Applicant>
{
public ApplicantDAO(SessionFactory factory)
{
super(factory);
}
public long create(Applicant person)
{
return persist(person).getApplicantId();
}
}
我正在从我的 Dropwizard 资源内部调用创建方法,我从我的应用程序的 运行 方法将我的托管 DAO 传递到该资源。以下无效:
try
{
long id = dao.create(applicant);
message += "[Stored: " + id + "] ";
}catch (HibernateException ex)
{
message +="Could't store: " + exptionToString(ex);
}
相反,我收到了 Dropwizard's/Jersey 的消息:
{"code":500,"message":"There was an error processing your request. It has been logged (ID a785167e05024c69)."}
有办法解决这个问题吗?
我不熟悉Drop Wizard。
但我最好的客人是它注册了一个 JAX-RS ExcepionMapper,当抛出异常时它会写入自己的错误
参见:javax.ws.rs.ext.ExceptionMapper
我明白了。问题是由于事务内部抛出异常而发生的。
所以我没有在我的资源方法上使用@UnitOfWork,而是添加了@UnitOfWork(transactional = false)
然后我能够通过将 SessionFactory 传递到我的资源来管理我自己的事务,这就成功了!
可能与以下问题有关:https://github.com/dropwizard/dropwizard/issues/949
我在使用 Dropwizard 时遇到问题,我无法捕获资源中 Hibernate DAO 对象抛出的异常。
我有以下 DAO 对象
public class ApplicantDAO extends AbstractDAO<Applicant>
{
public ApplicantDAO(SessionFactory factory)
{
super(factory);
}
public long create(Applicant person)
{
return persist(person).getApplicantId();
}
}
我正在从我的 Dropwizard 资源内部调用创建方法,我从我的应用程序的 运行 方法将我的托管 DAO 传递到该资源。以下无效:
try
{
long id = dao.create(applicant);
message += "[Stored: " + id + "] ";
}catch (HibernateException ex)
{
message +="Could't store: " + exptionToString(ex);
}
相反,我收到了 Dropwizard's/Jersey 的消息:
{"code":500,"message":"There was an error processing your request. It has been logged (ID a785167e05024c69)."}
有办法解决这个问题吗?
我不熟悉Drop Wizard。
但我最好的客人是它注册了一个 JAX-RS ExcepionMapper,当抛出异常时它会写入自己的错误
参见:javax.ws.rs.ext.ExceptionMapper
我明白了。问题是由于事务内部抛出异常而发生的。
所以我没有在我的资源方法上使用@UnitOfWork,而是添加了@UnitOfWork(transactional = false)
然后我能够通过将 SessionFactory 传递到我的资源来管理我自己的事务,这就成功了!
可能与以下问题有关:https://github.com/dropwizard/dropwizard/issues/949