【发布时间】:2015-03-20 08:08:21
【问题描述】:
加入时,我每行有一个选择。解决方案是批量获取,但我不希望到处都有那个注释......
http://eclipse.org/eclipselink/documentation/2.4/jpa/extensions/a_batchfetch.htm
为什么我什至需要这个?每行一个选择是可怕的......我如何在全球范围内设置它?干杯
【问题讨论】:
标签: jpa eclipselink jpa-2.0
加入时,我每行有一个选择。解决方案是批量获取,但我不希望到处都有那个注释......
http://eclipse.org/eclipselink/documentation/2.4/jpa/extensions/a_batchfetch.htm
为什么我什至需要这个?每行一个选择是可怕的......我如何在全球范围内设置它?干杯
【问题讨论】:
标签: jpa eclipselink jpa-2.0
也许不是理想的解决方案,但您可以尝试将 JPA 提示与 Java 泛型一起使用:
public <T> TypedQuery<T>
createBatchQuery(String ql, Class<T> clazz, String type, String size, String relation) {
return em.createQuery(jpql, clazz)
.setHint(QueryHints.BATCH_TYPE, type)
.setHint(QueryHints.BATCH_SIZE, size)
.setHint(QueryHints.BATCH, relation);
}
然后可以全局使用上述查询,并根据您的需要使用具体的查询实现进行扩展,即
String jpql = "SELECT c FROM Country c WHERE c.name = :name"; // or @NamedQuery
TypedQuery<Country> q = createBatchQuery(jpql, Country.class, "JOIN", "64", "c.cities");
q.setParameter("name", "Australia");
Country c = q.getSingleResult();
有关此主题的文章:
【讨论】:
c.cities 遵循 JPQL 约定,因此需要在 TypedQuery.setHint 方法和 @QueryHint 注释中指定为字符串。不幸的是,我不知道 DeltaSpike,但您当然可以使用 javax.persistence.EntityManager 进行此类查询。