我想检索所有 Foo对象,并为每个Foo对象检索数据库中关联的Bar对象数(零或更多)。我想在单个查询中执行此操作,但我不想获取Bar对象列表以获取其大小。
以下工作,但显然只返回具有匹配的Bar对象的Foo对象:
@NamedQuery(name = "Foo.findAndCountBars", query = "
SELECT new com.test.MyResultContainer(f, COUNT(b.id))
FROM Foo f, Bar b
WHERE f.uniqueKey = b.uniqueKey
GROUP BY f.id
")
请注意,Foo和Bar未通过主键连接。以下是我想要实现的目标(没有明确的关系,例如@OneToMany
中的Foo
):
@NamedQuery(name = "Foo.findAndCountBars", query = "
SELECT new com.test.MyResultContainer(f, COUNT(b.id))
FROM Foo f LEFT JOIN Bar b
ON f.uniqueKey = b.uniqueKey
GROUP BY f.id
")
我尝试了不同的语法变体,但基本上Eclipse告诉我b.id
未知,因为Bar
不在FROM
子句中。我怎么能这样做?