任何人都可以解释一下JPA的EntityManager的以下方法之间的区别: createQuery(),createNamedQuery()和createNativeQuery() 并解释我在哪些情况下你应该使用哪种方法?
答案 0 :(得分:34)
createQuery 方法用于创建动态查询,这些查询是直接在应用程序的业务逻辑中定义的查询。 例如:
public List findWithName(String name) {
return em.createQuery(
"SELECT c FROM Customer c WHERE c.name LIKE :custName")
.setParameter("custName", name)
.setMaxResults(10)
.getResultList();
}
createNamedQuery 方法用于创建静态查询,或使用javax.persistence.NamedQuery批注在元数据中定义的查询。 @NamedQuery的name元素指定将与createNamedQuery方法一起使用的查询的名称。 @NamedQuery的查询元素是查询:
@NamedQuery(
name="findAllCustomersWithName",
query="SELECT c FROM Customer c WHERE c.name LIKE :custName"
)
这是createNamedQuery的一个例子,它使用@NamedQuery:
@PersistenceContext
public EntityManager em;
...
customers = em.createNamedQuery("findAllCustomersWithName")
.setParameter("custName", "Smith")
.getResultList();
createNativeQuery 创建Query实例以执行本机 SQL语句。以下是选择 createNativeQuery :
的一些原因有关详情,请访问以下链接:
答案 1 :(得分:15)
答案 2 :(得分:1)
CreateQuery
用于创建JPQLqueries
createNamedQuery
用于在映射文件或注释中定义具有名称的查询,例如:obj.createNamedQuery("entity.findbycode",Something.class)
createNativeQuery
用于执行本机/纯SQL查询。