数据表单的关联(只有一种情况)和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>
图如上