次の違いは何ですか:
Root<Person> person = cq.from(Person.class);
と
EntityType<Person> Person_ = em.getMetamodel().entity(Person.class);
Root<Person> person = cq.from(Person_);
私はいくつかのチュートリアルで両方を見てきました..
次の違いは何ですか:
Root<Person> person = cq.from(Person.class);
と
EntityType<Person> Person_ = em.getMetamodel().entity(Person.class);
Root<Person> person = cq.from(Person_);
私はいくつかのチュートリアルで両方を見てきました..
Hibernate のCriteriaQuery 親の QueryStructure from(..)メソッドを見る:
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;
}
そのうちの 1 つは単なる過負荷であることがわかります。
より便利で定型的なエスケープ方法は、クラスをパラメーターとして渡すことです。
JPAのCriteriaQueryは単なるインターフェースであり、EclipseLinkやHibernateなどの実装プロバイダーは実際の実装を提供するため、使用しているJPA実装を提供しませんでした。次回はその点を考慮していただければ幸いです。