目录
一、多对一
二、一对多
三、多对多
一、多对一
这里以Product(多)对Category(一)为例。
1.准备Product.java (id,name,price)
2.准备Product.hbm.xml
3.准备Category.java (id,name)
4.准备Category.hbm.xml
5.在hibernate.cfg.xml中增加Category的映射
<mapping resource="com/how2java/pojo/Category.hbm.xml" />
6.为Product.java增加category属性
Category category;
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
7.在Product.hbm.xml中设置Category 多对一关系
使用many-to-one 标签设置多对一关系
name="category" 对应Product类中的category属性
class="Category" 表示对应Category类
column="cid" 表示指向 category表的外键,这个外键就是在product表中增加字段cid,由hibernate自动完成。
<many-to-one name="category" class="Category" column="cid" />
二、一对多
这里以Category(一)对Product(多)为例。
一对多相较于多对一的区别在于两点:
1.要在“一”这个实体类里增加“多”的属性的时候,是增加一个Set集合
Set<Product> products;
public Set<Product> getProducts() {
return products;
}
public void setProducts(Set<Product> products) {
this.products = products;
}
2.在“一”的配置文件中增加one-to-many映射(为Category.hbm.xml增加one-to-many映射)
set用于设置一对多(多对多也是他)关系
name="products" 表示对应 Category类中的products属性
lazy="false" 表示不使用延迟加载。
key column="cid" not-null="false" 表示外键是cid,可以为空
one-to-many class="Product" 表示一对多所对应的类是Product
<set name="products" lazy="false">
<key column="cid" not-null="false" />
<one-to-many class="Product" />
</set>
三、多对多
这里以Product(多)对User(多)为例。
要实现多对多关系,必须有一张中间表 user_product 用于维护User和Product之间的关系。
1.User.java中增加对应product的集合
Set<Product> products;
public Set<Product> getProducts() {
return products;
}
public void setProducts(Set<Product> products) {
this.products = products;
}
2.User.hbm.xml中添加many-to-many映射
<set name="products" table="user_product" lazy="false">
<key column="uid" />
<many-to-many column="pid" class="Product" />
</set>
3.Product.java中增加对应Users的集合
Set<User> users;
public Set<User> getUsers() {
return users;
}
public void setUsers(Set<User> users) {
this.users = users;
}
4.Product.hbm.xml添加many-to-many映射
<set name="users" table="user_product" lazy="false">
<key column="pid" />
<many-to-many column="uid" class="User" />
</set>