0
我有兩個實體,ShoppingCart和ShoppingCartLine。 ShoppingCart有一系列ShoppingCartLines。我正在嘗試使用條件創建一個JPA查詢,以獲取ShoppingCart ID的列表以及每個ShoppingCart所具有的ShoppingCartLines的數量。JPA 2標準 - group by和count
這是在我的購物類別的映射:
@OneToMany(mappedBy = "shoppingCart", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval=true)
private Set<ShoppingCartLine> shoppingCartLines = new TreeSet<ShoppingCartLine>();
這裏是我的嘗試與創建我的JPA查詢代碼:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Tuple> cq = cb.createTupleQuery();
Root<ShoppingCart> carts = cq.from(ShoppingCart.class);
Join<ShoppingCart, ShoppingCartLine> lines = carts.join("shoppingCartLines", JoinType.LEFT);
cq.multiselect(carts.<Long>get("id"), cb.count(lines));
cq.groupBy(carts.<Long>get("id"));
Query tq = em.createQuery(cq);
return tq.getResultList();
當我運行此我得到一個SQLGrammerException,生成的SQL對我來說看起來不正確。
select
shoppingca0_.id as col_0_0_,
count(.) as col_1_0_
from
SHOPPINGCART shoppingca0_
left outer join
SHOPPINGCARTLINE shoppingca1_
on shoppingca0_.id=shoppingca1_.shoppingCart_id,
SHOPPINGCARTLINE shoppingca2_
where
shoppingca0_.id=shoppingca2_.shoppingCart_id
group by
shoppingca0_.id
我要提到我使用Hibernate 3.5.4與MySQL5Dialect
這是我想生成查詢:
select
sc.id,
count(scl.id)
from
shoppingcart sc
left join
shoppingcartline scl
on
scl.shoppingCart_id = sc.id
group by
sc.id
任何想法,我做錯了嗎?謝謝。
你實際使用Hibernate?如果是這樣,你應該使用Hibernate Criteria。 – JamesENL 2014-11-07 03:40:04
我爲什麼要那樣做?我們使用JPA的原因是如果需要的話,可以更改我們的ORM。 – Jason 2014-11-07 14:53:52