hibernate映射(二) 之Hibernate单项一对多映射

来源:互联网 发布:无人机pos数据怎么确定 编辑:程序博客网 时间:2024/06/02 22:11

数据库sql

CREATE TABLE `company` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `com_name` varchar(20) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

CREATE TABLE `employee` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name` varchar(20) DEFAULT NULL,  `age` int(11) DEFAULT NULL,  `com_id` int(11) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;


实体类

company.java

package org.lei.model;import java.io.Serializable;import java.util.HashSet;import java.util.Set;public class Company implements Serializable{private Integer id;//主键id属性变量private String comName;//公司名称属性变量private Set employees = new HashSet<>();//雇员属性变量public Company(){}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getComName() {return comName;}public void setComName(String comName) {this.comName = comName;}public Set getEmployees() {return employees;}public void setEmployees(Set employees) {this.employees = employees;}/** * 注意要增加上面这两个方法 * 增加一个employee * @param employee */public void addEmployee(Employee employee){employees.add(employee);}/** * 删除一个employee * @param employee */public void removeEmployees(Employee employee){employees.remove(employee);}}

Employee.java员工类

package org.lei.model;public class Employee {private Integer id ;//主键id属性变量private String name;//姓名属性变量private Integer age;//年龄属性变量public Employee(){}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}}

映射文件

company.hbm.xml

<?xml version="1.0"?>  <!DOCTYPE hibernate-mapping PUBLIC       "-//Hibernate/Hibernate Mapping DTD 3.0//EN"      "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">     <hibernate-mapping>        <class name ="org.lei.model.Company" table="company">            <id name="id" type="java.lang.Integer">                <column name="id"/>                <generator class="native"/>            </id>                        <property name="comName" type="java.lang.String">                <column name="com_name" length="20"></column>            </property>            <set name ="employees" table="employee"  cascade="all">                <key column ="com_id"/>                <!-- 配置多对一关系映射 -->                <one-to-many class="org.lei.model.Employee" />            </set>        </class>    </hibernate-mapping>
要注意下面的几句话
<set name ="employees" table="employee"  cascade="all">                <key column ="com_id"/>                <!-- 配置多对一关系映射 -->                <one-to-many class="org.lei.model.Employee" />            </set>

employee.hbm.xml

<?xml version="1.0"?>  <!DOCTYPE hibernate-mapping PUBLIC       "-//Hibernate/Hibernate Mapping DTD 3.0//EN"      "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">    <hibernate-mapping>       <class name ="org.lei.model.Employee" table="employee">           <id name="id" type="java.lang.Integer">               <column name="id"></column>               <generator class = "native"></generator>           </id>                      <property name ="name" type="java.lang.String">               <column name="name" length="20"> </column>           </property>   <property name="age" type="java.lang.Integer">       <column name = "age" ></column>   </property>                  </class>   </hibernate-mapping>

测试类

TestOneToMany.java
package com.test;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.lei.model.Company;import org.lei.model.Employee;public class TestOneToMany {public static void main(String []args){Configuration cfg  =  new Configuration().configure("hibernate.cfg.xml");SessionFactory sessionFactory = cfg.buildSessionFactory();Employee e1 = new Employee();e1.setName("renlei1");e1.setAge(23);Employee e2 = new Employee();e2.setName("zhang2");e2.setAge(20);Employee e3 = new Employee();e3.setName("employee3");e3.setAge(23);Company com1 = new Company();com1.setComName("com1");Company com2 = new Company() ;com2.setComName("com2");com1.addEmployee(e1);com1.addEmployee(e2);com2.addEmployee(e3);Integer pid;//定义主键变量Session session = sessionFactory.openSession();Transaction tx = null;try {tx = session.beginTransaction();///开启事务pid = (Integer)session.save(com1);session.save(com2);tx.commit();} catch (HibernateException e) {              e.printStackTrace();              tx.rollback();//遇异常用回滚事务          }finally{        session.close();        }  }}
测试结果:





0 0
原创粉丝点击