日期:2014-05-17  浏览次数:20816 次

哪位大侠给讲讲。。hibernate的一对多和左连接。。。
有个问题。。 一直不太明白。。

例如:
  表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吗?

------解决方案--------------------
hibernate一对多检索,能检索出表A的aid是2的这条记录吗?
如果是用SQL的左连接就会把表A的都检索出来。

用Hibernate要用面向对象的思维去思考,你在查询的时候,如果没有配置lazy=false属性,那么默认会进行级联加载,也就是说可以根据A对象得到与之关联的B对象的集合。当然,在一般情况下,建议最好从多的一方获取一得一方。不然会有效率和异常问题。

左外连接,肯定会保留左表的全部记录。

hibernate的一对多跟SQL的左连接检索一样吗?

感觉没有可比性,不应该这么理解。

hibernate可以left join on吗?

可以left join

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