hibernate一对多单向关联的使用

一对多单向关联 使用一个实例对映多个实例,比如一个学生有很多本书,我们也可以使用多对一来映射,这里介绍一对多的注意事项,在一对多里我们只需要配置的一方,多方通过一方去管理
例如
一方类:
package com.sample.hbm;

import java.util.HashSet;
import java.util.Set;

public class User implements java.io.Serializable{
    private String userId;
    private String userName;
    private String password;
    private String sex;
    private String age;
    private Set books = new HashSet();
   
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public String getUserName() {
        System.out.println("**********getUserName***************" + userName);
        return userName;
    }
    public void setUserName(String userName) {
        System.out.println("**********setUserName***************" + userName);
        this.userName = userName;
    }
    public String getPassword() {
        System.out.println("**********getPassword***************" + password);
        return password;
    }
    public void setPassword(String password) {
        System.out.println("**********setPassword***************" + password);
        this.password = password;
    }
    public String getSex() {
        System.out.println("**********getSex***************" + sex);
        return sex;
    }
    public void setSex(String sex) {
        System.out.println("**********setSex***************" + sex);
        this.sex = sex;
    }
    public String getAge() {
        System.out.println("**********getAge***************" + age);
        return age;
    }
    public void setAge(String age) {
        System.out.println("**********setAge***************" + age);
        this.age = age;
    }
 
    public Set getBooks() {
        return books;
    }
    public void setBooks(Set books) {
        this.books = books;
    }
}
多方类:
package com.sample.hbm;

public class Books {
  private String bookId;
    private String bookName;

    public String getBookId() {
        return bookId;
    }

    public void setBookId(String bookId) {
        this.bookId = bookId;
    }

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }
}
一方配置文件:
<hibernate-mapping>
    <class name="com.sample.hbm.User" table="user_table"
        schema="public">
        <id name="userId" type="string">
            <column name="userid" length="32" />
            <generator class="uuid.hex" />
        </id>
        <property name="userName" type="string">
            <column name="username" length="32" />
        </property>
        <property name="password" type="string">
            <column name="password" length="16" />
        </property>
        <property name="sex" type="string">
            <column name="user_sex" length="8" />
        </property>
        <property name="age" type="string">
            <column name="user_age" length="8" />
        </property>
        <set name="books"  inverse="false" cascade="save-update">
            <key column="user_id" not-null="true"/>
            <one-to-many class="com.sample.hbm.Books" />
        </set> <!--user_id为books 表的外键 reference 到 user的主键-->
    </class>
</hibernate-mapping>

特别注意: <set>元素中的inverse属性,该属性表示关联关系由主控(一方)还是受控方(多方)维护。所谓关联关系的维护就是受控方的外键插入由谁来控制。inverse默认为false,表示由主控方来控制。 插入SQL的语句会分两次进行
Hibernate: insert into public.user_books (book_name, user_id, book_id) values (?, ?, ?)
Hibernate: insert into public.user_books (book_name, user_id, book_id) values (?, ?, ?)
这里插入的user_id 为null 然后在进行更新动作:
Hibernate: update public.user_books set user_id=? where book_id=?
Hibernate: update public.user_books set user_id=? where book_id=?


下面是多方配置文件:

<hibernate-mapping>
    <class name="com.sample.hbm.Books" table="user_books"
        schema="public">
        <id name="bookId" type="string">
            <column name="book_id" length="32" />
            <generator class="uuid.hex" />
        </id>
        <property name="bookName" type="string">
            <column name="book_name" length="32" />
        </property>

    </class>
</hibernate-mapping>

部分测试代码:

         Books book1 = new Books();
        book1.setBookName("JAVA-CN-JL-20080313-B0001");
        Books book2 = new Books();
        book2.setBookName("JAVA-CN-JL-20080313-B0002");
        Set books = new HashSet();
        books.add(book1);
        books.add(book2);
        user.setBooks(books);
       
        userDao.save(user);
以上一对多的配置 通过一方控制多方  通过inverse属性来控制多方
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值