Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查看任意对象是否为JPA实体的正确方法是什么?_Jpa - Fatal编程技术网

查看任意对象是否为JPA实体的正确方法是什么?

查看任意对象是否为JPA实体的正确方法是什么?,jpa,Jpa,报告(部分)说: 检查实例是否是属于当前持久性上下文的托管实体实例。 抛出: IllegalArgumentException-如果不是实体 本协议第3.1.1节规定: 如果持久性上下文加入到当前事务,则由EntityManager接口[例如contains(Object)]的方法引发的运行时异常[例如IllegalArgumentException]将导致当前事务标记为回滚 那么,在不回滚当前事务的情况下,检查任意对象(不知道它是否是实体,不知道它是否在持久性上下文中)是否同时是实体和持久性上

报告(部分)说:

检查实例是否是属于当前持久性上下文的托管实体实例。 抛出:
IllegalArgumentException
-如果不是实体

本协议第3.1.1节规定:

如果持久性上下文加入到当前事务,则由
EntityManager
接口[例如
contains(Object)
]的方法引发的运行时异常[例如
IllegalArgumentException
]将导致当前事务标记为回滚


那么,在不回滚当前事务的情况下,检查任意对象(不知道它是否是实体,不知道它是否在持久性上下文中)是否同时是实体和持久性上下文的首选方法是什么,这不会影响您当前的交易


一些注意事项 这是你最后一个问题的一个很好的例子,当我回答规范的某些部分没有正确的表述时。我将给您举一个例子,它可以毫无问题地工作,这与规范相矛盾(至少在JBoss 7.1和Hibernate中是这样):

在这个示例中,我的意思是您实际上可以使用
em.contains()
方法来检查类是否为实体类


PS:这在2.0规范中也有规定。

您是在什么上下文中使用Java EE还是SE?如果是EE,无论您的环境如何,您都使用什么应用程序服务器?您是否尝试过我的代码(如果是SE,可能会进行修改)?GlassFish 3.1.2.2附带的EclipseLink。在任意非实体对象上调用
contains()
将回滚事务,除非我丢失或混淆了某些内容。即使立即捕获到异常?您完全尝试过我的代码吗?请使用静态元模型,cf。
public class EjbServiceBean implement EjbService {

    @PersistenceContext
    private EntityManager em;

    @Override
    public void testTransaction() {

        //this code is in a transaction EJB method
        MyEntity entity = em.find(MyEntity.class, 1L);
        entity.setPeristentField("New Value");

        try {
            em.find(Class.class, 1);//should rollback the transaction
        } catch (Exception e) {
            //simply catching the Exception, so that the CMT transaction is not rolled back by the EJB container.
        }
    //but after the method returns, the entity instance is commited.
    }
}