【发布时间】:2014-02-02 17:25:13
【问题描述】:
我有一个带有(内部)连接的简单标准 api 查询
public void find(Category category) {
CriteriaBuilder b = getQueryBuilder();
CriteriaQuery<Product> q = createQuery();
Root<Product> root = q.from(Product.class);
Join<Product, Category> myCategory= root.join("category");
q.where(b.equal(myCategory, category));
entityManager.createQuery(q).getResultList();
}
查询有效,但如果我在 persistence.xml 中启用 sql 日志记录,我可以看到查询是一个
SELECT * FROM product, category WHERE ...
没有
SELECT * FROM product join category on category.id = product.category ...
知道这是什么原因吗? where 语句非常慢,所以真正的连接会更好。
我正在使用 eclipselink 2.5.1、Java EE7 和 postgres
我还有一个 Product 的超类
@Entity
@Audit
public class SuperClass {}
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Product extends SuperClass {}
但这应该没问题吧?
【问题讨论】:
标签: java sql jpa eclipselink inner-join