紧急求助很迷惑的一个问题,在hibernate中例如表A
aid int primary key,
aname varchar(20),
bid int,
foreign key (bid) references b (id)表B
bid int primary key,
bname varchar(20)
假如我现在有一个A对象,我怎样通过外键bid,获得bname(如果直接用SQL语句,是把两表连接起来),在hibernate中不知道怎么办

解决方案 »

  1.   

    如果你的表B 和 表A  建立了 一 对多的 双向关联 可以用
    一种方法:a.getB() 获得b对象 然后去取b里面的 bname属性.(a为你的A对象)
    另一种方法: 你既然知道  bid 你的 B表中 bid又是主键 直接  hql ="select b.bname from B b where b.bid=?" 
    参考一条hibernate中的内连接查询语句(与解答本题无关)
    hql ="from A a,B b where a.bid = b.bid ";
    如果你的B实体类中有一个关联到 A 的集合属性 aXXX 
    也可以用
    hql="from B a inner join aXXX";
      

  2.   

    楼上正解!
    建议一对多的关联,或者直接用hql查询!
      

  3.   

    假设A、B表对应实体类叫Atable、Btable
    select b.bname from Btable where atable
      

  4.   

    select b.bname from Btable b where b.atable.aid=?注意在A表的映射配置文件中(Atable.hbm.xml)中
    <many-to-one name="btable"
    class="...Btable">
    <column name="bid" length="40" lazy="false"/>
    </many-to-one>
      

  5.   


    指示hibernate如何加载其引用对象,默认情况下会根据主键匹配进行加载Person
    因为外键关联映射中,两个实体的关系是由表A的外键维护的,
    所以 直接使用a.getBid()就是取得了b表中的一个对象
     就可以使用表b中对象所定义的方法
    如a.getBid().get/setBname()
      

  6.   

    1楼介绍的很全面,希望楼主多关注下hibernate里的映射关系
      

  7.   

    如果刚开始学习,最好是在hibernat中做一对多的关系处理后,在实例里写好方法即可
      

  8.   

      ----------------------------------
              Quietly through ...
      

  9.   

    你sql 里面建好关系了, hibernate 框架 就自动建立 关系了 这个问题很容易解决的