JPA持续刷新功能

时间:2014-01-26 15:02:30

标签: java hibernate jpa

根据这两个功能我有一个奇怪的“问题”。 我有一个EJB容器,无状态,其中我有我的函数,可以插入,更新,删除选择我的数据库。

我在实体中有表格,所以上面的操作使用这些实体,除了一些选择。

我面临的问题是,到目前为止(AppServer glassfish)我只使用.persist()函数,并且如果存在任何违规问题(px大于“字符串”而不是列的长度)那么我的尝试catch(异常e)块正在捕获这些问题,我可以向EJB调用特定函数,因此最初调用该函数的Web服务发送更多firenly消息/异常。

现在使用JBoss我无法捕获相同的excpetion,代码返回了一个回滚异常。当我在每个函数的末尾添加.flush()函数时,我可以捕获异常并且一切正常。

(当然在这两种情况下,回滚都按照我的意愿运行) 我已经读过,持久化数据保留在缓存中,并且java决定何时在数据库中执行实际操作,并且当您调用flush时,您可以强制在数据库中完成兑现操作。

我的问题是,为什么会发生这种情况?我的意思是从一个appServer改为另一个具有相同代码的内容,主要是如果我无法捕获异常,最终的web服务获得异常

1 个答案:

答案 0 :(得分:0)

答案在于每个应用程序如何管理JPA相关操作。根据定义,JPA只是一个API。市场上有不同的JPA提供程序,如Hibernate,OpenJPA,EclipseLink,......因此,根据每个应用程序服务器使用的默认JPA提供程序,您可能会遇到一些操作处理方式的差异。

仅供参考:根据JBoss AS 6文档,当commit()方法失败时抛出RollbackException是绝对正常的

JBoss RollbackException documentation