1
花了大約2小時試圖瞭解爲什麼JPQL查詢不會返回我所期望的。請考慮代碼:JPQL - 在一對多中加入許多計數
System.out.println("JPQL ----------------------------");
Query q = em.createQuery(
"select u.userName, count(p.id) from User u " +
"left join u.posts p group by u.userName");
List x = q.getResultList();
for(Object o : x) {
Object[] y = (Object[])o;
System.out.printf("%s %s\n", y[0], y[1]);
}
System.out.println("Spring Data JPA -----------------");
for(User user : userRepository.findAll()) {
List<Post> posts = postRepository.findAllByAuthor(user);
System.out.printf("%s %s\n", user.getUserName(), posts.size());
}
輸出是:
JPQL ----------------------------
user1 0
user2 0
Spring Data JPA -----------------
user1 3
user2 10
我希望JPQL的方法來打印一樣什麼庫方法確實。錯誤在哪裏?
更新
這裏就是SQL跟蹤說:
select
user0_.userName as col_0_0_,
count(post2_.id) as col_1_0_
from User user0_
left outer join User_Post posts1_
on user0_.id=posts1_.User_id
left outer join Post post2_
on posts1_.posts_id=post2_.id
group
by user0_.userName
只是一個猜測(有沒有很長一段時間使用休眠):嘗試獲得在JPQL中擺脫了'group by'。 –
@MattBall:說SQLGrammarException :-( – agibalov
我不熟悉JPQL,但你沒有指定'join condition'我的意思是表應該加入什麼基礎 – Smit