Hibernate学习笔记3--映射关联关系

1.多对一(以customer和order为例子)

属性:

customer:customerId,customerName
order:orderId,orderName,Customer customer

order.hbm.xml中的部分配置:

<many-to-one name="customer" class="customer的全类名" column="customer_id"/>

说明:
1.column=”customer_id”是order表中关联customer的外键名。
2.在查询order的时候可能会出现懒加载,因为只有用到customer的时候才会发送查询语句。
3.插入的时候先插入多的一端(order)这样才不会出现update语句。

2.一对多(以customer和order为例子)

属性:

customer:customerId,customerName,Set<Order> orders=new  HashSet<>()
order:orderId,orderName,Customer customer

order.hbm.xml的部分配置:

<many-to-one name="customer" class="customer的全类名" column="customer_id">

customer.hbm.xml中的部分配置:

<set name="orders" table="order" reverse="true">
    <key column="customer_id(order表中对应customer的外键)"/>
    <one-to-many class="order的全类名"/>
</set>

插入的时候:先插入1(customer)的1端,再插入多(order)的一端,并在set集合中设置reverse=”true”(通过reverse的属性来决定谁来维护关系(不能两个都来维护,reverse=”false”的一方来维护,默认false)),这样有不会出现多余的update语句。

3.基于外键映射的一对一关系

属性

Manager.java:mgrId,mgrName,Deptment dept
DepartMent.java:deptid,deptName,Manager mgr

department中有外键mgr_id
Department中hbm的配置(有外键的一端用many-to-one)

<many-to-one name="mgr" class="manager的全类名" column="mgr_id" unique="true"/>

manager.hbm.xml的部分配置(没外键的用one-to-one)

<one-to-one name="dept" class="department的全类名" property-ref="mgr">

说明:使用property-ref=”mgr”来说明对方映射文件中外键列对应的属性名。

4.基于主键映射的一对一关系

。。。。。。
5.多对多关联关系的映射(以category(种类)和item(商品)为例

多对多的关联关系在数据库的关联方式:有一个中间表,里面有两个字段是两个表的外键。
先以单向多对多为例子:

Category:id,name ,Set<Item> items=new HashSet<>()
Item:id,name

Intem.hbm.xml的配置正常就行
Category.hbm.xml中对items属性的配置

<set  name=”items” table=”category_item”>
    <key>
        <column name=”c_id”>
    </key>
    <many-to-many class=”item” column=”i_id”><many-to-many>
</set>

说明:set中的table是中间表
Key中的column=”c_id”是category表在中间表中的外键
Many-to-many中的column=”i_id”是item表在中间表中的外键
双向多对多同理,但item需加上Set category=new HashSet<>(),同时也需要在item.hbm.xml中配置set,但中间表的表名和外键名都要和category中的配置相对应。同时要在其中的一个set中指定inverse=”true”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值