hibernate中對象集合的保存


 

一、在java web設計中經常使用對象進行操作,在hibernate中對象集合的保存(一對多)

1需要進行如下步驟:

1) 設計數據表關系

2)引入jar包,需要注意引入數據庫connector

3)寫實體類

4)配置映射文件和hibernate.cfg.xml

 

2例子如下:

員工和部門的關系,多個員工屬於一個部門,一個部門有多個員工。可以在員工表上設置一個外鍵解決一對多的關系。

2.1)創建表

CREATE TABLE employee(
id INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(50) NOT NULL,
depid INT,
FOREIGN KEY (depid) REFERENCES dept(id) ON DELETE CASCADE);

CREATE TABLE dept(
id INT PRIMARY KEY AUTO_INCREMENT,
dname VARCHAR(100));

2.2)引入jar包

 

 2.3)寫實體類

員工類

public class Employee {
    private int id;
    private String ename;
    private Dept dept = new Dept();
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getEname() {
        return ename;
    }
    public void setEname(String ename) {
        this.ename = ename;
    }
    public Dept getDept() {
        return dept;
    }
    public void setDept(Dept dept) {
        this.dept = dept;
    }
    
    

}
View Code

部門類

public class Dept {
    private int id;
    private String dname;
    private Set<Employee> employees = new HashSet<Employee>();
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getDname() {
        return dname;
    }
    public void setDname(String dname) {
        this.dname = dname;
    }
    public Set<Employee> getEmployees() {
        return employees;
    }
    public void setEmployees(Set<Employee> employees) {
        this.employees = employees;
    }
}
View Code

 

2.4)配置映射文件

部門映射文件,dept.hbm.xml

<hibernate-mapping 
    package="com.baidu.entity">
    <class name="Dept" table="dept">
        <id name="id" column="id">
            <generator class="native"/>
        </id>
        <property name="dname" column="dname"></property>
        
        <set name="employees" table="emploee">
            <key column="depid"></key>
            <one-to-many class="Employee"/>
        </set>

    </class>
</hibernate-mapping>

注意:在配置一對多的時候,部門對員工是一對多,要配置的內容set

1)集合屬性是哪一個,employees

2)該集合屬性存儲對象對應的表,employee

3)該表的外鍵,depid

4)集合中存儲對象的類型,class=Employee

 

員工映射文件,employee.hbm.xml

<hibernate-mapping 
    package="com.baidu.entity">
    <class name="Employee" table="employee">
        <id name="id" column="id">
            <generator class="native"/>
        </id>
        
        <property name="ename" column="ename"></property>
        <many-to-one name="dept" class="Dept" column="depid"></many-to-one>
    </class>

</hibernate-mapping>

注意:在配置多對一的時候,員工對部門是多對一。要配置的內容many-to-one

1)哪個對象要映射

2)該表哪個外鍵與對象關聯

3)映射對象的類型

 

全局配置hibernate.cfg.xml,可以查看之前博客hibernate開發流程

 

3 簡單測試

public void fun1(){
        Configuration configuration = new Configuration();
        configuration.configure();
        
        SessionFactory sessionFac = configuration.buildSessionFactory();
        Session session = sessionFac.openSession();
        Transaction bt = session.beginTransaction();
        
        Dept dept = new Dept();
        dept.setDname("test");
        Employee employee = new Employee();
        employee.setEname("test3");
        employee.setDept(dept);
        
        
        Employee employee2 = new Employee();
        employee2.setEname("test4");
        employee2.setDept(dept);
        
        session.save(employee);
        session.save(employee2);
        session.save(dept);
        
        bt.commit();
        
        session.close();
        sessionFac.close();
        
    }

 

 

 需要說明的是

在表中是通過外鍵來表達一對多或多對一的關系;在類中是通過對象集合來表達,例如set/list/map;在配置文件中需要注意set/list/map的配置

哪一張表有外鍵就操作該表對應那個對象進行添加另外的對象,不然會出問題。

在hibernate中想要將一個對象映射成一個外鍵字段,只有many-to-one

在使用對象進行保存時,如果想要正確保存關聯的對象時需要設置cascade屬性為“save-update”,或者“all” 

實體類中如果有類對象屬性,要進行初始化,否則可能得不到正確結果。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM