HQL无法理解类的属性,它是另一个类的集合

时间:2013-07-06 10:46:19

标签: java hibernate hql

我有两节课,比如AB A有一组B作为其属性。 B无法了解A

Class A {
    @OneToMany(fetch=FetchType.LAZY)
    @JoinTable(name = "A_B_MAPPING", joinColumns = @JoinColumn(name = "A_ID") , inverseJoinColumns = @JoinColumn(name = "B_ID"))
    private Set<B> bs;
}

问题是,当我想删除A没有B的那些记录时,HQL不理解它!我的代码是这样的:

String hql = "DELETE FROM A WHERE bs IS NULL";
Query query = getSession().createQuery(hql);
query.executeUpdate(); // <-- Here an exception is thrown

看起来,HQL无法理解此属性不是列,而是必须加入A_B_MAPPING。 我还注意到生成的查询引用了这个bs属性
non-qualified-property-ref

所以问题是,如何修改我的查询以实现我的目标?

1 个答案:

答案 0 :(得分:0)

在HQL中,您需要声明一个别名以将其用作实例变量并访问这些字段。尝试修改您的查询:

String hql = "DELETE FROM A a WHERE a.bs IS NULL";

HQL和集合的另一个问题是,集合可能不是null,而是空的。在这种情况下,您应该使用is empty代替is null

String hql = "DELETE FROM A a WHERE a.bs IS EMPTY";

我认为您需要is empty查询表来解决您的问题。