1

我有两节课,比如说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;
}

问题是,当我想删除那些没有的记录时ABHQL 不明白!我的代码是这样的:

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

所以问题是,我怎样才能修改我的查询来实现我的目标?

4

1 回答 1

0

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

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

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

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

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

于 2013-07-06T11:05:00.203 回答