`
零度弥合
  • 浏览: 21011 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

J2EE之路(七)hibernate(03)关联映射

 
阅读更多

关联映射

  • 多对一(Employee - Department)
  • 一对多(Department - Employee)
  • 一对一(person - idcard)
  • 多对多(teacher - student)
  • 组合映射(User - Name)
  • 集合映射(set,list,map,sag)
  • inverse和cascade(Employ - department)

多对一映射(Employee = Department)

 

映射文件<many-to-one name="depart" column="depart_id"/>

可以看出,我们可以只关心对象模型,关系模型由hibernte来维护。

对应一下Department类

package domain;

public class Employee {
	private int id;
	private String name;
	private Department depart;
	
	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;
	}
}

 可以看出Employee类持有department类的引用,在配置文件中只要把属性放进名字即可。

看一下自动生生成的Employee表的建表语句,果然生成了外键。

PS:只是标签从property编程了many-to-one其他的貌似都没变

测试一下:

package test;

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

import Util.HibernateUtils;
import domain.Department;
import domain.Employee;
import domain.User;

public final class TestMany2One {
	public static void main(String[] args) {
		add();
		query(1);
	}

	private static void add() {
		Session session = null;
		Transaction transaction = null;
		try{
			session = HibernateUtils.getSession();
			transaction = session.beginTransaction();
			Department depart = new Department();
			depart.setName("depart01");
			Employee employee = new Employee();
			employee.setName("employee01");
			employee.setDepart(depart);//对象模型:建立两个对象的关联
			session.save(depart);
			session.save(employee);
			transaction.commit();
		}catch(Exception e){
			e.printStackTrace();
			transaction.rollback();
		}finally{
			if(session != null)
				session.close();
		}
	}
	
	private static Employee query(int id) {
		Session session = null;
		try{
			session = HibernateUtils.getSession();
			Employee employee = (Employee) session.get(Employee.class,id);
			System.out.println(employee.getDepart().getName());
			return employee;
		}finally{
			if(session != null)
				session.close();
		}
	}
}

 

 一对多(Department - Employee)

 在Department类中增加属性Set<Employee> emps 表示一对多

在Deppartment的配置文件中增加

<set name="emps">

 <key column="depart_id"/>

<one-to-many calss="Employee"/>

</set>

 

一对一(person - idcard)

 

基于主键的one-to-one(person的映射文件)

<id name="id">

 <generator class="foreign">

<param name="property">idcard<param>

</generator>

<id>

<one-to-one name="idCard" constrained="true">

 

多对多(teacher - student)

 

在操作和性能方面都不太理想,所以多对多映射使用较少,实际使用中最好转换成一对多的模型,Hibernate会为我们创建中间关联表,转换成两个一对多。

<set name="teacher" table="teacher_student">

<key column="teacher_id">

<many-to-many class="student" column="student">

</>

 

组合映射(User - Name)

感觉就是这个对象不是很大,不用使用一张表来表示他比如姓和名直接放进User表就好

标签如下:

<compoment name="name">

<property name="firstName" column="first_name">

<property name="lastName" column="last_name">

</compoment>

 

最后零散笔记吧

 

级联操作:<set name="emps" cascade="save-update">

一对多,多对一是相互的,一般一的这一方面放弃对关系的维护:<set name="emps" inverse="true">

以上只能是set,list不能指定inverse,所以一对多最好不用List,而用set

分享到:
评论

相关推荐

    J2EE系列讲座之Hibernate.lesson1.rar

    【标题】"J2EE系列讲座之Hibernate.lesson1.rar" 提供的是关于J2EE开发中的一个重要组件——Hibernate的学习资源,这是一款强大的对象关系映射(ORM)框架,旨在简化Java应用程序与数据库之间的交互。在J2EE环境中,...

    开发者突击:Java Web主流框架整合开发:J2EE+Struts+Hibernate+Spring 部分例子源代码 及数据库

    Struts2Test很可能是一个用于演示Struts2特性的测试项目,可能包含Action类、视图页面以及与之关联的业务逻辑和数据库操作。通过阅读和运行这些源代码,开发者可以深入理解每个框架的工作原理,以及它们如何协同工作...

    J2EE培训课件 Hibernate JSF CSS

    - Hibernate的一对一、一对多、多对多的关联映射。 - CSS的选择器语法,盒模型理解,布局技巧如Flexbox和Grid。 - CSS3的新特性,如伪类、动画、媒体查询等。 - 如何在JSF应用中整合Hibernate,实现数据的增删改查。...

    浪磬J2EE第一期 Hibernate专题 第六讲 检索方式

    在J2EE开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本讲主要聚焦于Hibernate的检索方式,通过深入探讨和实践,我们将了解如何有效地从数据库中获取数据。 一、Hibernate检索...

    Hibernate继承关系映射.pdf

    本文档主要聚焦于Hibernate框架下继承关系的映射,通过三种不同的策略——隐式继承映射、单表映射和关联表映射,来实现类的继承结构在数据库中的映射。 ### 隐式继承映射 #### 定义与配置 隐式继承映射也称为“表...

    j2ee hibernate source4

    此外,它可能还会涵盖如何使用Hibernate的API进行数据操作,以及如何处理关联映射、事务管理和缓存策略等高级话题。 在实际开发中,理解J2EE与Hibernate的协同工作原理至关重要。例如,J2EE中的Servlet和JSP负责...

    J2EE企业级项目开发-1期 06 hibernate映射视图的使用经验.doc

    总结起来,在J2EE项目开发中,使用Hibernate映射视图是一种解决复杂查询和跨表统计的有效策略。当原生SQL不适用时,创建视图并进行相应的ORM配置可以保持代码的整洁性和可维护性。需要注意的是,视图的映射可能会...

    hibernate的延迟检索在轻量级J2EE框架中的应用

    ### Hibernate的延迟检索在轻量级J2EE框架中的应用 #### 1. 引言 随着互联网技术的发展,Web应用程序的需求日益增加,对于高效、快速的开发模式也提出了更高的要求。轻量级J2EE框架(Struts+Spring+Hibernate)因...

    Addison-Wesley Professional Hibernate A J2EE Developer's Guide

    7. **一对多、一对一、多对多关联映射** Hibernate支持多种关系映射,包括实体之间的关联,如一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)和多对多(@ManyToMany)关系的处理。 8. **缓存...

    J2EE三大框架_笔记_a

    27-32Hibernate数据关联技术_1vs1应用案例_笔记 33-37Hibernate1对N案例笔记 38-43Hibernate多对多案例笔记 J2EE框架_笔记_c: 44登陆案例(Struts+DAO+Hibernate)笔记 45-Struts+Hibernate完成分页笔记 46-...

    在 Hibernate 中实现复杂的数据映射

    在本篇关于“在 Hibernate 中实现复杂的数据映射”的文章中,我们将深入探讨如何使用 Hibernate 框架处理不同类型的关联关系,包括一对一、一对多和多对多。这些关系在数据库设计中十分常见,而 Hibernate 提供了...

    j2ee项目实训——hibernate框架技术

    在J2EE项目开发中,Hibernate是一个非常重要的持久层框架,它简化了数据库与Java对象之间的交互,使得开发者可以更加专注于业务逻辑,而非繁琐的SQL语句编写。本实训主要围绕Hibernate框架技术展开,旨在帮助你深入...

    浅谈基于Struts和Hibernate的J2EE应用

    Hibernate通过配置文件和注解,将数据库表与Java类关联,实现了对象的持久化。开发者可以通过调用对象的方法来执行CRUD(创建、读取、更新、删除)操作,而无需编写大量的SQL语句。 【Struts与Hibernate结合】 在...

    j2ee hibernate数据库的增删改查

    在J2EE应用程序开发中,Hibernate是一个非常重要的ORM(对象关系映射)框架,它使得Java开发者能够方便地处理数据库操作,如增删改查(CRUD),而无需编写大量的SQL语句。本教程将详细介绍如何使用Hibernate实现...

Global site tag (gtag.js) - Google Analytics