美文网首页
Hibernate学习笔记(二) 建立关系

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

作者: 吴忆松 | 来源:发表于2019-10-29 00:32 被阅读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> 
    

    相关文章

      网友评论

          本文标题:Hibernate学习笔记(二) 建立关系

          本文链接:https://www.haomeiwen.com/subject/synivctx.html