【发布时间】:2014-01-20 18:34:18
【问题描述】:
javax.persistence.EntityManager#contains(Object) method's documentation 说(部分):
检查实例是否是属于当前持久性上下文的托管实体实例。 投掷:
IllegalArgumentException- 如果不是实体
JPA 2.1 specification 的第 3.1.1 节说:
由
EntityManager接口的方法[例如contains(Object)]而不是LockTimeoutException的方法抛出的运行时异常[例如IllegalArgumentException]将导致当前事务被标记为回滚,如果持久性上下文是加入该交易。
那么,什么是检查任意对象(不知道它是否是实体,不知道它是否在持久化上下文中)是否既是实体又在持久化上下文中而不回滚的首选方法当前交易?
【问题讨论】:
-
你在什么环境下:Java EE 还是 SE?如果是 EE,你用什么应用服务器不管你的上下文,你有没有试过我的代码(如果是 SE,可能会适应)?
-
GlassFish 3.1.2.2 随附的 EclipseLink。在任意非实体对象上调用
contains()会回滚事务,除非我遗漏或混淆了某些内容。 -
即使异常立即被捕获?你试过我的代码了吗?
-
使用静态元模型,参见。 stackoverflow.com/questions/49307727/….
标签: jpa