Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.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
Java JPA2标准API:在from子句中使用Entity.class和元模型的EntityType之间有什么区别_Java_Hibernate_Jpa 2.0_Criteria Api - Fatal编程技术网

Java JPA2标准API:在from子句中使用Entity.class和元模型的EntityType之间有什么区别

Java JPA2标准API:在from子句中使用Entity.class和元模型的EntityType之间有什么区别,java,hibernate,jpa-2.0,criteria-api,Java,Hibernate,Jpa 2.0,Criteria Api,以下两者之间的区别是什么: Root<Person> person = cq.from(Person.class); Root person=cq.from(person.class); 及 EntityType Person\uem=getMetamodel().entity(Person.class); Root person=cq.from(person_uu); 我在几篇教程中都看到了这两个方面。分析 查看Hibernate的方法: public Root from(类

以下两者之间的区别是什么:

Root<Person> person = cq.from(Person.class);
Root person=cq.from(person.class);

EntityType Person\uem=getMetamodel().entity(Person.class);
Root person=cq.from(person_uu);
我在几篇教程中都看到了这两个方面。

分析 查看Hibernate的方法:

public Root from(类entityClass){
EntityType EntityType=criteriaBuilder.getEntityManagerFactory()
.getMetamodel()文件
.实体(实体类);
if(entityType==null){
抛出新的IllegalArgumentException(entityClass+“不是实体”);
}
从(entityType)返回;
}
公共根目录(EntityType EntityType){
RootImpl root=新的RootImpl(criteriaBuilder,entityType);
根。添加(根);
返回根;
}
我们看到,其中一个只是过载

结果 通过类作为参数将是更方便、更安全的锅炉板逃生方式

忠告
您没有提供正在使用的JPA实现,因为JPA的CriteriaQuery只是一个接口,而EclipseLink或Hibernate等实现提供了实际的实现。下一次,如果你考虑到这一点,那就太棒了。

我使用Hibernate作为实现。谢谢你的回答:)
EntityType<Person> Person_ = em.getMetamodel().entity(Person.class);
Root<Person> person = cq.from(Person_);
public <X> Root<X> from(Class<X> entityClass) {
    EntityType<X> entityType = criteriaBuilder.getEntityManagerFactory()
            .getMetamodel()
            .entity( entityClass );
    if ( entityType == null ) {
        throw new IllegalArgumentException( entityClass + " is not an entity" );
    }
    return from( entityType );
}

public <X> Root<X> from(EntityType<X> entityType) {
    RootImpl<X> root = new RootImpl<X>( criteriaBuilder, entityType );
    roots.add( root );
    return root;
}