0
我有一個與另一個實體具有一對多關係的實體。說jpa 2 CriteriaQuery不區分子實體
1A -> 1.*B
我寫了這個查詢。
CriteriaBuilder cb = super.getEntityManager().getCriteriaBuilder();
CriteriaQuery<A> select = cb.createQuery(A.class);
Root<A> from = select.from(A.class);
Join<A, B> joinB = from.<A, B>join("b");
select.select(from);
select.where(cb.between(joinB.<Date>get("date"), dateA, dateB));
問題:該查詢返回所有的子實體,而不是隻有那些符合之間的約束。
所以即使一個有3個孩子乙,只有兩個符合標準,查詢總是返回3 B的。
簽入hibernate的生成的sql,我可以看到這一點。
select a from A where a_id = ? and b_date b.date between ? and ?
這是很好的,所有一個檢索到的實體符合標準,但隨後第二個查詢被拋出,以獲得乙實體。
select * from b where aid = ?
這是錯誤的,因爲選擇應該是
select * from b where aid = ? and b.date between ? and ?
我有這個問題一次,但我查詢我以前不使用CriteriaBuilder,它是通過使用連接抓取解決,但CriteriaQuery我一直無法解決它。