【发布时间】:2023-03-23 10:08:02
【问题描述】:
我正在使用 JPA 和 hibernate 作为实现
我有以下应用程序代码
CustomerData customerData = (Customer) getCustomerDataDAO().getObjectByNamedQuery("Customerdata.findByCustomername", queryParameters);
调用下面的方法
@Override
@SuppressWarnings("unchecked")
public <T> getByNamedQuery(final String queryName) {
Query queryObject = entityManager.createNamedQuery(queryName);
return queryObject.getResultList().get(0);
}
现在查询会在 queryObject.getResultList() 执行后立即触发。当我访问一些客户数据的属性时,我期待查询会被触发。 默认情况下是否会急切获取 JPA 命名查询?
【问题讨论】:
-
所有查询,无论是否命名,都会在您调用 getResultList() 时执行。正如 javadoc 所说:docs.oracle.com/javaee/6/api/javax/persistence/…:执行 SELECT 查询并将查询结果作为无类型列表返回。
-
顺便说一句,你怎么能在没有列表的情况下访问列表的第一个元素? JPA 如何在不执行查询的情况下返回填充列表?
-
哦,我错过了。我认为当您访问域对象属性时也会执行查询,就像 get 等会话方法一样。请将其发布为答案,以便我接受它
-
@JB Nizet 你能看看stackoverflow.com/questions/34242610/…,如果可能的话,分享你的想法吗?