问下,用hibernate进行多表查询的时候,必须要进行主外键设计吗?
比方说,a表: id,ssbh,ssmc (id是主键)
b表 id,number,name,ssbh (id是主键)
我现在想用hibernate查询出,number,name,ssmc的内容,请问,必须要把b表ssbh设计成外键吗?a表的ssbh设计成主键吗?
比方说,a表: id,ssbh,ssmc (id是主键)
b表 id,number,name,ssbh (id是主键)
我现在想用hibernate查询出,number,name,ssmc的内容,请问,必须要把b表ssbh设计成外键吗?a表的ssbh设计成主键吗?
如果不是唯一的,你也不能把其设计为主键.
所以可以不用设计为主键.
我觉得你的问题主要是在对“主键”定义的理解上面: 比如说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>
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字段建立外键