假设有表A(a1,a2,a3),B(b1,b2,b3),表A对表B是一对多的关系.
现在要查出这样的数据,用sql如下:
select * from A a left join B b on a.a1 = b.b1
假设我查出来是:
a1 a2 a3    b1   b2   b3
-----------------
1   0  0     1    1    1
2   0  0  null null null如此查出来,似乎要在页面显示这些数据的时候特别不方便啊?
大伙一般这种情况是直接用hql查,然后根据遍历set,再根据关联表B的对象(假设是B)来取得A的内容,还是直接绕过去用jdbc来取数据?第一种的话必须配双向关联.
大伙谈谈经验,不胜感激.

解决方案 »

  1.   

    貌似不用双向关联,利用A到B的单向关联就可以了,你查询出A,很自然的A里包含了B的集合,再由该集合遍历出A中的B就好了,这时A和B就都得到了,何必非要再从B关联到A呢?
      

  2.   

    关键是你要查询什么,实现什么功能,一对多hibernate是要配置双向关联的,如果你要显示的东东很复杂可以直接绕过Hibernate 用Jdbc来操作!
      

  3.   

    简单的如我所说的需求,更复杂的就不用说了.
    对于以下的需求我个人是倾向于用jdbc的:
    1.表关联复杂,一次查询要关联10几张表.
    2.以某次查询结果为条件再进行查询的,特别的是在循环体内查询的,全部扔数据库里面执行,一次查询就能得到想要的结果.试问sql上百行的代码,用hql不知道要死多少个脑细胞了..
      

  4.   

    sql能查的hql不也一样查么?难道sql写几个左联右联,hql写几个join as就不行么?
    我觉得有时候此类问题可能是表结构设计的不够合理,更复杂的查询用存储过程也是个选择,在使用hibernate的时候想用jdbc暗箱操作,不留神就有可能出问题。
      

  5.   

    建议hibernate也支持jdbc
    可以query
      

  6.   

    hql不方便就用sql啊
    hibernate又不是没有提供
    Hibernate的createSQLQuery
      

  7.   

    select a,b from A as a left join a.b as b
    查出来是List  里面放的是Object[A,B] A,B分别为AB对象的实例
    页面就循环List,还好吧
      

  8.   

    建立了对象关联之后hql不复杂啊。
    直接用sql会破坏程序一致性。
      

  9.   

    sql能查的hql不也一样查么?难道sql写几个左联右联,hql写几个join as就不行么? 
    我觉得有时候此类问题可能是表结构设计的不够合理,更复杂的查询用存储过程也是个选择,在使用hibernate的时候想用jdbc暗箱操作,不留神就有可能出问题。