从Hibernate中的非拥有实体查询拥有实体

时间:2015-11-13 17:14:00

标签: java hibernate jpa hql

我有两个实体,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,则查询有效。为什么我需要进行连接以确定关系是否为空?

1 个答案:

答案 0 :(得分:0)

在您的查询中,您使用的是HQL隐式连接语法。根据Hibernate docs 15.4. Forms of join syntax,这种形式的连接会产生SQL内部连接,它本质上只过滤那些在另一个表中存在匹配项的项。在hql中使用显式左连接将使您的查询更透明。通过persistence.xml或通过服务器的日志配置启用SQL查询日志记录,以检查hibernate生成的实际SQL命令。