Hibernate学习笔记(二) 建立关系

2019-10-29  本文已影响0人  吴忆松

目录

一、多对一
二、一对多
三、多对多


一、多对一

这里以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> 
上一篇 下一篇

猜你喜欢

热点阅读