• 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” 

    实体类中如果有类对象属性,要进行初始化,否则可能得不到正确结果。

  • 相关阅读:
    Chrome浏览器扩展开发系列之三:Google Chrome浏览器扩展的架构
    Chrome浏览器扩展开发系列之一:初识Google Chrome扩展
    Chrome浏览器扩展开发系列之五:Page Action类型的Chrome浏览器扩展
    Chrome浏览器扩展开发系列之四:Browser Action类型的Chrome浏览器扩展
    鼠标定位问题总结
    Chrome浏览器扩展开发系列之八:Chrome扩展的数据存储
    Chrome浏览器扩展开发系列之七:override页面
    Chrome浏览器扩展开发系列之六:options 页面
    Chrome浏览器扩展开发系列之二:Google Chrome浏览器扩展的调试
    Chrome浏览器扩展开发系列之九:Chrome浏览器的chrome.alarms.* API
  • 原文地址:https://www.cnblogs.com/zhaopengcheng/p/6768172.html
Copyright © 2020-2023  润新知