我有那两张桌子
表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因此指向没有任何意味着我无法在我的视图中显示所需的数据! 我怎样才能克服这个问题?谢谢!
答案 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),但这应该是可理解的。