谁能解释一下 JPA 的以下方法之间的区别实体管理器:
createQuery()
createNamedQuery()
createNativeQuery()
并告诉我在什么情况下我们应该使用哪种方法?
-
创建查询方法用于创建动态查询,这些查询是直接在应用程序的业务逻辑中定义的查询。
例子:
public List findWithName(String name) {
return em.createQuery(
"SELECT c FROM Customer c WHERE c.name LIKE :custName")
.setParameter("custName", name)
.setMaxResults(10)
.getResultList();
}
-
创建命名查询方法用于创建静态查询,或使用 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();
欲了解更多详情,请访问这些链接:
使用 Java 持久性查询语言创建查询 https://docs.oracle.com/javaee/6/tutorial/doc/bnbrg.html
JPA为什么使用createNamedQuery https://stackoverflow.com/questions/832755/jpa-why-use-createnamedquery
为什么我们需要创建本机查询? https://stackoverflow.com/questions/13288416/why-do-we-need-to-create-native-query
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)