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

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





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值