JPA&x27;s EntityManager createQuery()与createNamedQuery()与createNativeQuery()的比较
有人能给我解释一下JPA的EntityManager的以下方法之间的区别吗JPA&x27;s EntityManager createQuery()与createNamedQuery()与createNativeQuery()的比较,jpa,Jpa,有人能给我解释一下JPA的EntityManager的以下方法之间的区别吗 createQuery() createNamedQuery() createNativeQuery() 并向我解释在哪些情况下我们应该使用哪种方法? createQuery方法用于创建动态查询,这些查询是直接在应用程序的业务逻辑中定义的查询。 例如: createNamedQuery方法用于创建静态查询,或使用javax.persistence.NamedQuery注释在元数据中定义的查询。@NamedQuery
createQuery()
createNamedQuery()
createNativeQuery()
- createQuery方法用于创建动态查询,这些查询是直接在应用程序的业务逻辑中定义的查询。 例如:
- createNamedQuery方法用于创建静态查询,或使用javax.persistence.NamedQuery注释在元数据中定义的查询。@NamedQuery的name元素指定将与createNamedQuery方法一起使用的查询的名称。@NamedQuery的查询元素是:
@NamedQuery( name="findAllCustomersWithName", query="SELECT c FROM Customer c WHERE c.name LIKE :custName" )
@PersistenceContext
public EntityManager em;
...
customers = em.createNamedQuery("findAllCustomersWithName")
.setParameter("custName", "Smith")
.getResultList();
- createNativeQuery创建用于执行本机查询的查询实例
SQL语句。以下是选择createNativeQuery的一些原因:
- 低级别访问,这意味着您可以自己优化和处理映射;使用SQL实际访问数据库表,而使用JPQL访问实体对象李>
- 如果您已经了解SQL,那么可能不想学习JPQL
- 您已经用SQL编写了查询,并且没有资源/时间将它们移植到JPQL
CreateQuery
用于创建JPQLqueries
createNamedQuery
用于定义映射文件或注释中具有名称的查询,例如:obj.createNamedQuery(“entity.findbycode”,Something.class)
createNativeQuery
用于执行本机/纯SQL查询。除了“HQL”与JPA无关之外。JPA使用JPQL,而这个链接理论上可以回答这个问题,在这里包括答案的基本部分,并提供链接供参考。否则一句评论就足够了。
@PersistenceContext
public EntityManager em;
...
customers = em.createNamedQuery("findAllCustomersWithName")
.setParameter("custName", "Smith")
.getResultList();