Hibernate:只查找那些不在多对多关系中的行

时间:2011-04-07 06:38:21

标签: java hibernate many-to-many

好的,我已经用注释映射了两个具有双向@ManyToMany关系的表。

现在我想只返回不在多对多关系中的元素,并且我正在尝试使用here中的代码,但它在运行时抛出异常。 这是HQL:

String hql = "select a from Article a " +
                "left join a.tags t " +
                "group by a " +
                "having count(t)=0";

有没有更好的方法来返回这些元素?或者修复此查询中的错误?

它现在抛出的例外是:

column "article0_.id" must appear in the GROUP BY clause or be used in an aggregate function

org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute query; SQL ...

2 个答案:

答案 0 :(得分:2)

查询是正确的,但在某些数据库上group by a是不够的,您必须使用a的所有属性,例如group by a.id, a.title

或者,您可以使用以下查询:

select a from Article a where a.tags is empty

另见:

答案 1 :(得分:1)

不确定它是否可行,但你可以尝试一下:

String hql = "select a from Article a " +
                "where a.tags=null ";