有三个表A,B,C
public class A{
private int aid;
private B b;
}public class B{
private int bid;
private C c;
private Set as = new HashSet();
}public class C{
private cid;
private Set b = new HashSet();
}
我现在想查询出A的所有集合,其中A中的b属性被查出来,B中的c属性被查出来不知道怎么弄HQL一点也不通,希望高手帮帮忙,谢谢顺便讲一讲fetch在这里有没有用?

解决方案 »

  1.   

    HQL就写"from A"啊,这里你没必要用join的,就用默认的select不是很好吗?
    拿到A以后,用get方法就能拿到B,B里的get方法可以拿到C。这不是就达到你的目的了吗。
    你用fetch=join无非是怕懒加载失败吧,你可以在拿到A以后直接用Hibernate.initialize()方法初始化B和C。
      

  2.   

    我想直接用HQL查询出来,可以吗?
      

  3.   

    楼上正确,因为你的DAO类已经表明了三个表之间的关系,因此,
    hibernate会帮你填充关联表的数据。
    这是用hibernate的好处之一啊,还不大大利用,呵呵。
      

  4.   

    但是Hibernate中有延迟加载的问题需要楼主注意哦~
    需要在配置文件中表明:lazy="false"
    然后写HQL:String hql = "from A";
    这样的话你迭代A的时候可以直接用getB().getC()等等
      

  5.   

    1楼的答案正确。
    如果楼主想要用Hql的话,需要知道你表之间的关系,至少是多对一或者是一对一,只要在where条件里面,把关联的主键做相等,例如
    from A where A.bid=b.id and b.cid=c.id
      

  6.   

    完全可以,hibernate会自动补完关联关系的sql语句
      

  7.   

    From A as a inner join a.b as b inner join b.c
    我不太记得了 不知道这个HQL写对没
    我一般喜欢这么写
    From A a,B b,C c where a.aid=b.bid,b.bid=c.cid
      

  8.   

    是啊,hibernate会自动将关联的属性填充值,为什么还要自己写hql语句呢?