在 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