`

hibernate关联关系-多对一

阅读更多

多对一关联关系:

 

模型:员工Employee — 部门Department

 

package Domain;

public class Employee {
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Department getDepart() {
		return depart;
	}
	public void setDepart(Department depart) {
		this.depart = depart;
	}
	
	private int id;
	private String name;
	private Department depart;
}

 

 

package Domain;

import java.util.Set;

public class Department {
		
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}	
	public Set<Employee> getEmps() {
		return emps;
	}
	public void setEmps(Set<Employee> emps) {
		this.emps = emps;
	}

	private int id;
	private String name;
	private Set<Employee> emps ;
}

 

 

<?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 package="Domain">

	<class name="Employee" table="employee">
		<id name="id">
			<generator class="native" />
		</id>
		<property name="name" unique="true"/>
		<many-to-one name="depart" column="depart_id"/>
	</class>
</hibernate-mapping>

 

 

<?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 package="Domain">

	<class name="Department" table="department">
		<id name="id">
			<generator class="native" />
		</id>
		<property name="name" unique="true"/>
		
		<set name="emps">
			<key column="depart_id"/>
			<one-to-many class="Employee"/>
		</set>
		
	</class>
</hibernate-mapping>

 

package Dao;

import Domain.Employee;

public interface EmployeeDAO {
	public void saveEmployee(Employee emp);
	public Employee findEmployeeByName(String name);
	public Employee findEmployeeById(int id);
	public void updateEmployee(Employee emp);
	public void removeEmployee(Employee emp);
}

 

 

package Dao;

import Domain.Department;


public interface DepartmentDAO {
	public void saveDepartment(Department depart);
	public Department findDepartmentByName(String name);
	public Department findDepartmentById(int id);
	public void updateDepartment(Department depart);
	public void removeDepartment(Department depart);
}

 

 

package Dao.Impl;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import Utils.hibernateUtil;
import Dao.EmployeeDAO;
import Domain.Employee;

public class EmployeeDAOImpl implements EmployeeDAO {

	// 保存员工
	public void saveEmployee(Employee emp) {
		Session s = null;
		Transaction tx = null;
		try{
			s = hibernateUtil.getSession();
			tx = s.beginTransaction();
			s.save(emp);
			tx.commit();
		}catch (HibernateException e) {
			if(tx != null){
				tx.rollback();
			}
			throw e;
		}finally{
			if(s != null){
				s.close();
			}
		}
	}

	// 根据姓名查询员工
	public Employee findEmployeeByName(String name) {
		Session s = null ;
		try{
			s = hibernateUtil.getSession();
			String hql = "from Employee as emp where emp.name=:name";
			Query query = s.createQuery(hql);
			query.setString("name", name);
			Employee emp = (Employee) query.uniqueResult();
			return emp;
		}finally{
			if(s != null){
				s.close();
			}
		}
	}

	// 根据员工id查询员工
	public Employee findEmployeeById(int id) {
		Session s = null ;
		try{
			s = hibernateUtil.getSession();
			Employee emp = (Employee) s.get(Employee.class, id);
			return emp;
		}finally{
			if(s != null)
			{
				s.close();
			}
		}
	}

	// 更新员工信息
	public void updateEmployee(Employee emp) {
		Session s = null;
		Transaction tx = null;
		try{
			s = hibernateUtil.getSession();
			tx = s.beginTransaction();
			s.update(emp);
			tx.commit();
		}catch (HibernateException e) {
			if(tx != null){
				tx.rollback();
			}
			throw e;
		}finally{
			if(s != null){
				s.close();
			}
		}
	}

	// 删除员工
	public void removeEmployee(Employee emp) {
		Session s = null;
		Transaction tx = null;
		try{
			s = hibernateUtil.getSession();
			tx = s.beginTransaction();
			s.delete(emp);
			tx.commit();
		}catch (HibernateException e) {
			if(tx != null){
				tx.rollback();
			}
			throw e;
		}finally{
			if(s != null){
				s.close();
			}
		}
	}
}

 

 

package Dao.Impl;


import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;


import Dao.DepartmentDAO;
import Domain.Department;
import Utils.hibernateUtil;


public class DepartmentDAOImpl implements DepartmentDAO {

	// 保存部门
	public void saveDepartment(Department depart) {
		Session s = null;
		Transaction tx = null;
		try{
			s = hibernateUtil.getSession();
			tx = s.beginTransaction();
			s.save(depart);
			tx.commit();
		}catch (HibernateException e) {
			if(tx != null){
				tx.rollback();
			}
			throw e;
		}finally{
			if(s != null){
				s.close();
			}
		}
	}

	// 根据name查找部门
	public Department findDepartmentByName(String name) {
		Session s = null ;
		try{
			s = hibernateUtil.getSession();
			String hql = "from Department as depart where depart.name=:name";
			Query query = s.createQuery(hql);
			query.setString("name", name);
			Department depart = (Department) query.uniqueResult();
			return depart;
		}finally{
			if(s != null){
				s.close();
			}
		}
	}

	// 根据id查找部门
	public Department findDepartmentById(int id) {
		Session s = null ;
		try{
			s = hibernateUtil.getSession();
			Department depart = (Department) s.get(Department.class, id);
			return depart;
		}finally{
			if(s != null)
			{
				s.close();
			}
		}
	}

	// 更新部门
	public void updateDepartment(Department depart) {
		Session s = null;
		Transaction tx = null;
		try{
			s = hibernateUtil.getSession();
			tx = s.beginTransaction();
			s.update(depart);
			tx.commit();
		}catch (HibernateException e) {
			if(tx != null){
				tx.rollback();
			}
			throw e;
		}finally{
			if(s != null){
				s.close();
			}
		}
	}
	
	// 删除部门
	public void removeDepartment(Department depart) {
		Session s = null;
		Transaction tx = null;
		try{
			s = hibernateUtil.getSession();
			tx = s.beginTransaction();
			s.delete(depart);
			tx.commit();
		}catch (HibernateException e) {
			if(tx != null){
				tx.rollback();
			}
			throw e;
		}finally{
			if(s != null){
				s.close();
			}
		}
	}
}

 

 

package Dao.Test;

import org.hibernate.Session;
import org.hibernate.Transaction;

import Utils.hibernateUtil;

import Domain.Department;
import Domain.Employee;

public class Many2OneTest {
	public static void main(String[] args) {
		add();
	}
	
	public static Department add(){
		Session s = null ;
		Transaction tx = null;
		try{
			Department depart = new Department();
			depart.setName("xuan chuan bu");
			
			Employee emp = new Employee();
			emp.setDepart(depart);// 对象模型,建立两个对象间的关联关系
			emp.setName("zhang zuoqiang");
			
			s = hibernateUtil.getSession();
			tx = s.beginTransaction();
			
			s.save(depart);
			s.save(emp);
			
			tx.commit();
			
			return depart;
		}finally{
			if(s != null){
				s.close();
			}
		}
	}
}

 

分享到:
评论
1 楼 csdn_zuoqiang 2010-08-03  
一对多测试:

package Dao.Test;

import org.hibernate.Session;
import org.hibernate.Transaction;

import Utils.hibernateUtil;
import Domain.Department;
import Domain.Employee;

public class One2ManyTest {
public static void main(String[] args) {
Department depart = add();
queryDepart(depart.getId());
}

static Department queryDepart(int departId) {
Session s = null;
try {
s = hibernateUtil.getSession();
Department depart = (Department) s.get(Department.class, departId);
System.out.println("emp  size: " + depart.getEmps().size());
return depart;
} finally {
if (s != null)
s.close();
}
}

static Department add() {
Session s = null;
Transaction tx = null;
try {
Department depart = new Department();
depart.setName("+Manager+");

Employee emp1 = new Employee();
emp1.setDepart(depart);
// 对象模型:建立两个对象的关联
emp1.setName("emp name1");

Employee emp2 = new Employee();
emp2.setDepart(depart);
// 对象模型:建立两个对象的关联
emp2.setName("emp name2");

/*Set<Employee> emps = new HashSet<Employee>();
emps.add(emp1);
emps.add(emp2);
depart.setEmps(emps);*/

s = hibernateUtil.getSession();
tx = s.beginTransaction();

s.save(depart);
s.save(emp1);
s.save(emp2);
System.out.println("-----------------");
tx.commit();

return depart;
} finally {
if (s != null)
s.close();
}
}
}

相关推荐

    hibernate-release-5.2.10

    7. **关联映射**:包括一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)、多对多(@ManyToMany)关系的映射,方便处理对象间的关联关系。 8. **延迟加载**:Hibernate的懒加载策略可以在需要时才...

    hibernate-jpa-2.1-api-1.0.0.final.jar.zip

    其中,Hibernate作为一款功能强大的ORM框架,极大地简化了Java对象与数据库表之间的映射关系处理。而JPA(Java Persistence API)是Java EE规范的一部分,为ORM提供了标准的接口。`hibernate-jpa-2.1-api-1.0.0....

    Hibernate ORM - 一对多双向关联关系

    标题“Hibernate ORM - 一对多双向关联关系”指的是在数据库建模中,Hibernate ORM(对象关系映射)框架如何处理一个实体类(如User)与多个实体类(如Article)之间的关系。在这种关系中,一个用户可以拥有多个文章...

    Hibernate ORM - 多对多双向连接表关联关系

    本文将深入探讨Hibernate ORM中的一个关键概念——多对多双向连接表关联关系。这种关联关系在实际业务场景中非常常见,比如用户与角色、课程与学生等例子,都需要用到多对多的关系来描述它们之间的复杂联系。 首先...

    hibernate-annotations-3.4.0.GA

    6. @ManyToOne、@OneToOne、@OneToMany、@ManyToMany:定义不同类型的关联关系,如一对一、一对多、多对多。 7. @JoinColumn:用于关联关系中指定外键字段的属性。 8. @Temporal:用于日期时间类型的字段,支持...

    hibernate-release-5.0.7.Final.zip

    Hibernate,作为Java领域中的一个强大的对象关系映射(ORM)框架,极大地简化了数据库操作,使得开发者可以使用面向对象的方式处理数据库事务。在2016年,传智播客黑马程序员发布的Hibernate教程中,特别选用了...

    hibernate-common-annotations.jar

    6. @OneToMany、@ManyToOne、@OneToOne、@ManyToMany:表示不同类型的关联关系,如一对一、一对多、多对多。 7. @JoinColumn:用于指定关联字段在表中的具体列名。 8. @Temporal:处理日期和时间类型的字段,如...

    hibernate-distribution-3.3.2.GA-dist

    7. **关联映射**:支持一对一、一对多、多对一和多对多等各种关联关系的映射,使得对象间的关联关系能够自然地反映到数据库中。 8. **延迟加载**:Hibernate的懒加载策略能有效减少数据库交互,只有在真正需要时才...

    Hibernate关联映射-one to one单向外键关联

    本话题主要探讨的是Hibernate中的一种关联映射方式——一对一(One-to-One)单向外键关联。这种关联模式通常用于两个实体之间存在唯一对应的关系,例如一个用户对应一个唯一的账户。 在Hibernate中,一对一关联可以...

    hibernate一对一关联关系

    在实体类之间,Hibernate支持多种关联关系,包括一对一(One-to-One)、一对多(One-to-Many)和多对多(Many-to-Many)。本资源主要探讨的是“hibernate一对一关联关系”。 一对一关联关系在现实世界中很常见,...

    最新 hibernate-release-4.2.13.Final.tgz

    2. 探索映射:深入理解实体类与数据库表之间的映射机制,包括一对一、一对多、多对一、多对多关系的配置。 3. 深入查询:掌握HQL和Criteria API的高级用法,如分页、排序、子查询等。 4. 事务管理:了解Hibernate的...

    hibernate-release-5.3.2.Final

    Hibernate ORM,作为Java领域最著名的对象关系映射框架之一,自诞生以来就深受开发者喜爱。2018年7月5日,Hibernate发布了其最新版本——5.3.2.Final,带来了诸多改进和新特性,为开发者提供了更为高效、稳定的持久...

    Hibernate ORM - 一对一连接表关联关系

    标题"Hibernate ORM - 一对一连接表关联关系" 提示我们,这里主要讨论的是Hibernate ORM框架在处理数据库中一对一(One-to-One)关联映射的方法。Hibernate是一个流行的Java对象关系映射(ORM)工具,它允许开发者用...

    hibernate多对一单向关联关系实现源码

    在Java的持久化框架Hibernate中,多对一(ManyToOne)关联关系是一种常见的对象关系映射(ORM)场景。这种关系通常出现在一个实体类拥有多条与另一个实体类相关的记录,而另一个实体类可能只有一条对应的记录。例如...

    hibernate源码release-4.1.4.Final版

    Hibernate的懒加载机制可以在需要时才加载关联的对象,避免了大量数据一次性加载导致的内存压力。但需注意防止“懒加载地狱”。 九、性能优化 包括但不限于:合理使用缓存,避免N+1查询问题,使用批处理更新,选择...

    hibernate-orm-3.3源码

    3.3 版本在前代基础上进行了多方面的改进,包括性能优化、新的查询语言 HQL(Hibernate Query Language)以及对 JPA(Java Persistence API)的支持等。 二、核心组件 1. SessionFactory:它是 Hibernate 的核心,...

    Hibernate ORM - 一对一主键关联关系

    在Hibernate中,一对一的主键关联关系可以通过以下几种方式配置: 1. **注解配置**: 使用`@OneToOne`注解来声明一对一关系,同时通过`@PrimaryKeyJoinColumn`注解指定共享的主键列。例如: ```java @Entity ...

    hibernate one-to-one 一对一唯一外键关联映射_单向 and 双向

    在上面的配置中, `&lt;many-to-one&gt;` 标签指定了Person实体与IdCard实体之间的一对一唯一外键关联关系,其中unique="true"指定了多的一端的多重性为一。 Hibernate 一对一唯一外键关联映射的应用 在实际应用中,一对...

    Hibernate关联关系

    ### Hibernate关联关系详解 在Java开发领域中,Hibernate作为一个强大的对象关系映射(ORM)框架,为开发者提供了方便地操作数据库的方式。通过将Java对象与数据库表进行映射,Hibernate大大简化了数据持久化层的...

    Hibernate映射一对多关联关系

    ### Hibernate映射一对多关联关系 #### 知识点概览 - **概念解析**:一对多(One-to-Many)关联关系的概念及其在Hibernate中的实现方式。 - **域模型设计**:创建具有一个实体与多个实体关联的域模型。 - **关系...

Global site tag (gtag.js) - Google Analytics