在Dropwizard中处理托管的Hibernate DAO异常

时间:2015-05-24 23:25:16

标签: java hibernate jersey 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资源中调用create方法,我从我的应用程序运行方法中传递了我的托管DAO。以下不起作用:

try
{
    long id = dao.create(applicant);
    message += "[Stored: " + id + "] ";
}catch (HibernateException ex)
{
    message +="Could't store: " + exptionToString(ex);
}

相反,我得到了Dropwizard&Jersey&#39的消息:

{"code":500,"message":"There was an error processing your request. It has been logged (ID a785167e05024c69)."}

有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:0)

我不熟悉Drop Wizard。

但我最好的客人是它注册了JAX-RS ExcepionMapper,在抛出异常时编写自己的错误

参见:javax.ws.rs.ext.ExceptionMapper

答案 1 :(得分:0)

我明白了。问题发生的原因是事务内部发生了异常抛出。

所以我没有在我的资源方法上使用@UnitOfWork,而是添加了@UnitOfWork(transactional = false)

然后我可以通过将SessionFactory传递给我的资源来管理我自己的事务,并且这样做了!

可能与以下问题有关:https://github.com/dropwizard/dropwizard/issues/949