有个问题。。 一直不太明白。。例如:
  表A
      aid aname
      1   A
      2   V
      3   C 
  表B
      bid aid binfo
      1     1   xxx
      2     1   nnnn
      3     3   zzzz 
      4     3   mmmm 1。表A和表B是一对多的关系。通过hibernate的配置文件,即hbm.xml可配置一对多这个关系。
    然后检索时,直接检索两个表。(利用的是HQL语句)
 2。直接左连接两个表。进行检索。(利用的是SQL语句)    hibernate一对多检索,能检索出表A的aid是2的这条记录吗?
    如果是用SQL的左连接就会把表A的都检索出来。    如果用hibernate进行检索的话,跟用SQL的左连接检索有什么区别?????
    hibernate的一对多跟SQL的左连接检索一样吗?
    hibernate可以left join on吗?

解决方案 »

  1.   

    hibernate一对多检索,能检索出表A的aid是2的这条记录吗?
    如果是用SQL的左连接就会把表A的都检索出来。用Hibernate要用面向对象的思维去思考,你在查询的时候,如果没有配置lazy=false属性,那么默认会进行级联加载,也就是说可以根据A对象得到与之关联的B对象的集合。当然,在一般情况下,建议最好从多的一方获取一得一方。不然会有效率和异常问题。左外连接,肯定会保留左表的全部记录。hibernate的一对多跟SQL的左连接检索一样吗?感觉没有可比性,不应该这么理解。hibernate可以left join on吗?可以left join
      

  2.   

    因为你已经配置了两个对象之间的关系,当然可以取出一这一端的数据,你可以用HQL来写,当然HQL是支持左右连接的,这样写效率上会更高一点,因为控制台只会发一条SQL,还有一种方法就是取多的一端,因为你的javabean中肯定有一这一端的对象,所以你可以通过get方法取到一端对象,这样会产生N+1的问题,效率上不好。所以建议还是用HQL写连接查询
      

  3.   

     hibernate一对多检索,能检索出表A的aid是2的这条记录吗?
      如果是用SQL的左连接就会把表A的都检索出来。  如果用hibernate进行检索的话,跟用SQL的左连接检索有什么区别?????
      hibernate的一对多跟SQL的左连接检索一样吗?
      hibernate可以left join on吗?
    -------------------------------------------------------
    你先把做链接搞清楚。左链接是把左边表的数据全部显示出来。
    A left join B,显示全部A的
    B left join A,显示全部B的。显示不出来aid是2的记录。因为B表是左表,B里面没有。