hibernate在没有主外键关系时是如何维护多对一等关联关系的

1.  其实本身hibernate就不是通过数据库的主外键关系去作的关联?(只是一般情况都比较正常:即要关联肯定就是有主外键关系的,所以看上去是数据库建立了主外键关系,hibernate才正常关联,其实不是这样的,不管数据库是否设置了外键引用,hibernate都可以配置正确的关联关系。)

2.  Hibernate默认的关联是“主键加载”方式,即默认会在关联关系的配置上加上:constrained=“true”。

<hibernate-mappingpackage="entity">

    <class name="Book" table="tbl_book">

<id name="id" column="b_id">

<generator class="native" />

</id>

<property name="author" column="b_author"/>

<property name="price" column="b_price"/>

<many-to-onename="type" class="BookType"column="b_title" lazy="false"  constrained="true"></many-to-one>

</class>

</hibernate-mapping>

3.  constrained=“true”并不是指做关联的列一定是主键,如上面的配置:并不是说b_title列一定要去匹配BookType所映射的表的主键列。constrained=“true”的真正含义是指去关联对应的类(如这里的BookType)的hibernate映射文件中<id>…</id>节点配置的列。一般我们在<id>…</id>节点中都会是配置的ID列,所以一般会去关联ID。

4.  如果我们不想改变默认的主键加载关联方式,却又不想去关联ID,那么可以在对应的类的hibernate映射文件中更改<id>节点的配置。如:

<hibernate-mappingpackage="entity">

<class name="BookType" table="tbl_bookType">

<id name="title" column="t_title">

           </id>

<property name="name" column="t_name"/>

<property name="id" column="t_id" />

</class>

</hibernate-mapping>

这个时候,2中配置的Book类的多对一关联关系就会来关联这里BookType对应表中的t_title列。

5.    另外一种自己配置关联列的方式就是不使用默认的“主键加载“方式。可以在关联关系的配置中加入: property-ref="要关联的列对应的实体属性"如这里可配为:

<hibernate-mappingpackage="entity">

<class name="Book" table="tbl_book">

<id name="id" column="b_id">

<generator class="native" />

</id>

<property name="author" column="b_author"/>

<property name="price" column="b_price"/>

<many-to-onename="type" class="BookType"column="b_title" lazy="false"  property-ref="title" ></many-to-one>

</class>

</hibernate-mapping>

那么对应的BookType的配置就不需要将<id>配为title了,如下:

<hibernate-mappingpackage="entity">

<class name="BookType" table="tbl_bookType">

<id name="id" column="t_id">

           </id>

<property name="name" column="t_name"/>

<property name="title" column="t_title"/>

</class>

</hibernate-mapping>

 

6. 参考资料:http://hi.baidu.com/xingkongbaobei/item/7417a37330ad9112d0dcb311

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值