我有两节课,比如A
和B
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
!
所以问题是,如何修改我的查询以实现我的目标?
答案 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
查询表来解决您的问题。