hibernate中关联映射的学习总结

数据表单的关联(只有一种情况)和hibernate的关联映射

hibernate关联映射是建立在数据表的关联之上的,根据业务需求,方便数据的操作而设计的

而数据表的关联,不一定会导致hibernate的关联

1、many-to-one关联映射(单项关联)

public class Customer {
private Integer id;
private String name;
}

public class Order {
private Integer id;
private String orderNumber;
private Double price;
//多个订单对应一个客户(多对1)
private Customer customer;
}

<many-to-one name="customer" class="Customer" column="customer_id"/>

column:表示customer属性对应表的外键,这里是customer_id.
容易的理解:如果获取订单属于的客户,这里是通过订单表的外键customer_id,来查询客户的信息

关联后的表结构:

id(pk) name
1 刘备
2 关羽
3 张飞


id(pk) orderNumber price customer_id(fk)
1 NO01 56 1
2 NO02 78 2
3 NO03 90 1
4 NO04 23 1
5 NO05 78 2
6 NO06 45 3


要求:

1、many方要添加one方的属性

2、many方配置信息中要增加many-to-one信息

3、many方many-to-one中要提供one方在many方中的name以及name所对应的class,以及列名



2、one-to-many的映射关联(单项关联)

public class Customer {
private Integer id;
private String name;
private Set<Order> orders=new HashSet(0);

}

public class Order {
private Integer id;
private String orderNumber;
private Double price;
}

在one端:

<set name="orders" table="orders">
<key>
<column name="customer_id"/>//这个是customer表的外键,列会出现在order表中
</key>
<one-to-many class="Order"/>
</set>

set:用于配置集合 1对多
* name:待映射的持久化类中的属性
* table="orders":表示该集合中的信息来源于那个表,这里的集合存放的是订单,
来源于orders表
* key:标签key中配置的都是表的外键,
* column name="customer_id":表示订单集合的数据是通过订单表外键获取的
select id,orderNumber,price from orders where customer_id=客户id
* one-to-many:映射一对多的关系
* class="Order"
* class:表示orders集合放置的是class属性指定的类型的对象



id(pk) name
1 刘备
2 关羽
3 张飞


id(pk) orderNumber price customer_id(fk)
1 NO01 56 1
2 NO02 78 2
3 NO03 90 1
4 NO04 23 1
5 NO05 78 2
6 NO06 45 3





3、one-to-many的映射关联(双向)

public class Customer {
private Integer id;
private String name;
private Set<Order> orders=new HashSet(0);

}

public class Order {
private Integer id;
private String orderNumber;
private Double price;
private Customer customer;
}

one方:

<set name="orders" table="orders">
<key>
<column name="customer_id"></column>
</key>
<one-to-many class="Order"/>
</set>

many方:

<many-to-one name="customer" class="Customer">
<column name="customer_id"></column>
</many-to-one>

图如上

你可能感兴趣的:(一对多关联,多对多关联,多对一关联,hibernate的映射关联)