Hibernate HQL使用null值保持连接

时间:2017-01-25 09:51:46

标签: sql hibernate join null hql

我有那两张桌子

表A,包含列:id,description,title

表B包含列:id,user,authenticnt,rel_id

表B rel_id是表A.id(一对一)上的FK

(in_array( 'width', $img[1] ) and in_array( '""', $img[1] ))

现在,我希望hql与Sql具有相同的结果:

==> Table A Entity
==> @JoinColumn(name = "REL_ID", nullable = false, referencedColumnName = "ID")
    private ObjectTableA objA;

包括所有表A行ONCE和表B引用(包括null)

例如

select *
from tableA a
left outer join tableB b on a.id = b.REL_ID and b.user='ADMIN';

hibernate HQL和上面第二行(id = 2)的问题在于我无法通过执行EntityB.rel_id来访问表A行数据,因为rel_id对象(其类型为EntityA)为null因此指向没有任何意味着我无法在我的视图中显示所需的数据! 我怎样才能克服这个问题?谢谢!

1 个答案:

答案 0 :(得分:0)

要么我没有解决问题,要么你必须以另一种方式解释它。

一个令人困惑的事实是你正在展示的地图。它说

  

表A实体

但是有一个ObjectTableA类型的字段。这可能是ObjectTableB的源代码。否则对我来说它看起来像一个自引用(Entity ObjectTableA包含一个ObjectTableA类型的字段),在这种情况下没有任何意义。

如果我的假设是正确的,因此您的映射显示nullable=false,那么在没有适当的实体A的情况下永远不应该存在实体B.其他方式可能存在很多类型A的实体而没有类型B的相关实体。这正是您的第二行的内容:

  

2 - des2 - tit2 - null - null - null - null

如果您想获取所有ObjectTableA实体,您的HQL查询将类似于:

查询#1:SELECT a FROM ObjectTableA a;

如果你想得到所有的ObjectTableB实体,那就更像是:

查询#2:SELECT b FROM ObjectTableB b WHERE b.user =:username;

如果您还想将所有ObjectTableA内容加载到ObjectTableB实体中,请执行以下操作:

查询#3:SELECT b FROM ObjectTableB b JOIN FETCH b.objA AS a WHERE b.user =:username;

当然,您只能使用HQL查询#1访问相关行的数据(没有适当实体B的实体A),但这应该是可理解的。

相关问题