我有两个实体,A和B.实体A有以下注释。
@OneToOne(mappedBy="entityA", optional=true)
public EntityB getEntityB() {
return b;
}
public void setEntityB(EntityB b) {
this.b = b;
}
实体B具有以下注释
@OneToOne
public A getEntityA() {
return a;
}
public void setEntityA(EntityA a) {
this.a = a;
}
当我查询以下内容时,一切正常。
String hql = "from EntityB eb where eb.entityA is null";
当我尝试使用此查询时,它不起作用。
String hql = "from EntityA ea where ea.entityB is null";
如果我关注其他StackOverflow answer,则查询有效。为什么我需要进行连接以确定关系是否为空?
答案 0 :(得分:0)
在您的查询中,您使用的是HQL隐式连接语法。根据Hibernate docs 15.4. Forms of join syntax,这种形式的连接会产生SQL内部连接,它本质上只过滤那些在另一个表中存在匹配项的项。在hql中使用显式左连接将使您的查询更透明。通过persistence.xml
或通过服务器的日志配置启用SQL查询日志记录,以检查hibernate生成的实际SQL命令。