码迷,mamicode.com
首页 > Web开发 > 详细

hibernate中对象集合的保存

时间:2017-04-26 14:40:47      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:tle   display   技术分享   java web   多个   builds   一对多   actor   集合   

 

一、在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

 

hibernate中对象集合的保存

标签:tle   display   技术分享   java web   多个   builds   一对多   actor   集合   

原文地址:http://www.cnblogs.com/zhaopengcheng/p/6768172.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!