问下,用hibernate进行多表查询的时候,必须要进行主外键设计吗?
比方说,a表: id,ssbh,ssmc (id是主键)
b表 id,number,name,ssbh  (id是主键)
我现在想用hibernate查询出,number,name,ssmc的内容,请问,必须要把b表ssbh设计成外键吗?a表的ssbh设计成主键吗?

解决方案 »

  1.   

    如果需求ssbh是唯一的,不设计成主键也可以.
    如果不是唯一的,你也不能把其设计为主键.
    所以可以不用设计为主键.
      

  2.   

    你把要连接的在hbm里面设置就可以了,数据库里可以不设置
      

  3.   

    在hbm中怎么设计哦,我可能就是这个地方不是很懂.
      

  4.   

    对    如果你想在xxx.hbm.xml中维护两个表之间的关系的话就得这样建立主外键的关系!   
    我觉得你的问题主要是在对“主键”定义的理解上面:  比如说b表的ssbh引用了a表的ssbn字段,此时a表的ssbn字段就作为关联关系的主键字段,这点不用含糊!这“主键”是针对ab表这对关联关系而言的,并非是对单表而言!   
    这时候在a、b表的主键字段仍然应该是id,而且我们也提倡每张表的主键跟具体业务无关。在b表中就可以这样配置了:
    <set name="items"  cascade="all" lazy="false">
    <key column="ssbh"/>
    <one-to-many class="a"/>
    </set>
      

  5.   

    呵呵,我在建表的时候,一般不喜欢建外键的,我这2个表比方说,a表: id,ssbh,ssmc (id是主键) 
    b表 id,number,name,ssbh  (id是主键) 
    a表的ssbh应该也是主键,他是唯一的,b表ssbh应该建外键,a与b表之间的关系应该是"1对多"
    我现在在数据库只给这2个表的id(无实际意思)建主键,不建立外键
    如果要用hibernate进行联表查询
    number,name,ssmc 这些字段信息(当然,sql语句写起来很简单)肯定要对xxx.hbm.xml进行设置,怎样设置,才能查出来
    另外hql语句,这样写
    hql=number,name,ssmc from A,B where A.ssbh=B.ssbh
    这样写,是不是可行?
    难道非得给b表的ssbh字段建立外键