数据库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.javapackage 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();
}
}
}
测试结果:
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();
}
}
}