`

Hibernate的Map配置

阅读更多
摘自圣思园022.Hibernate映射Map详解


应用场景:
这里有一个Team类和一个Student类,
Team类代码如下:
public class Team
{
	private String id;
	
	private String teamName;
	
	
	/**
	 * 将学生对象集合定义为一个map
	 */
	private Map students=new HashMap(); 
	
}


一个team中可以包含多个student, 这些student被放在一个map集合中。

此时生成的数据库表格就是:
Team->id, name
Student->team_id, key,value

Student表格中的key就是对应的team的id,而value则是student的名字。

这里有两种方式来生成对应的ORM table。 一种是只配置Team相关, 在Team.hbm.xml中配置生成的Student对象。 该Student对象只包含一对键值对。(该方法只需要建立一个空的Student.java即可)

还有一种是我们常用的方法, 配置Team.hbm.xml以及Student.hbm.xml。 这种方法可以在Student.java里加入各种属性,并最终加入到Student的table中。

一: 配置Team


Team.hbm.xml

<hibernate-mapping package="map">
	<class name="Team" table="test_team">

		<id name="id" column="id" type="string">
			<generator class="uuid">
			</generator>
		</id>

		<property name="teamName" column="team_name" type="string" />
	
	
		
		<!-- 对于map,有专门的map映射标签 -->
		 
	 <!-- 告诉hibernate students是一个map对象 -->
	 <map name="students" table="test_student">   <!-- table属性表示所对应的map在数据库中的表名 -->
			
			<!-- key表示student表中与team所对应的外键 -->
			<key column="team_id"/>
			
			<!-- index表示student表中的键值(id),也是map集合中的key值 -->
			<index column="name" type="java.lang.String"/>
			
			<!-- element表示map集合中的value值 -->			
			<element column="description" type="java.lang.String" />
			
		 </map>
		 
		 
	</class>



</hibernate-mapping>


=============================================================================


生成table
执行configure,Hibernate会自动生成以下SQL语句:

/*建立Student表格*/
create table test_student
(team_id varchar2(255 char) not null,
description varchar2(255 char),
name varchar2(255 char) not null,
primary key(team_id,name));


/*建立Team表格*/
create table test_team(
id varchar2(255 char) not null,
team_name varchar2(255 char),
primary key(id));

/*设置Student表的team_id外联Team表格*/
alter table test_student
add constraint FK_dk062403lt7507oncwn9uo4ro foreign key (team_id_) references test_team;



student这张表是通过Team.hbm.xml的map映射配置生成的。
该表总共生成了三列。

1.team_id, 也就是student表的foreign key, 对应team表。 <key column="team_id"/>

2. name, 是Team对象中的map的key值。
3. description, Team对象中的map的value值。

=============================================================================


插入

	Session session=HibernateUtil.openSession();
		
		Transaction tx=session.beginTransaction();
		 
		Team team=new Team();
		
		team.setTeamName("english");
		
		Map map=team.getStudents();
		
		map.put("alleni", "programmer");
		
		map.put("eline", "illustrator");
		
		
		session.save(team);
		
		tx.commit();


插入之后数据库如下:




===============================================


二: 配置Team+Student

以上的代码是通过设置map映射来完成Object Relational Mapping.
在该示例中,并没有加入Student.java和Student.hbm.xml。Student的数据库Entity纯粹通过Team.hbm.xml文件中的配置来生成。


接下来看看如何通过创建Student.java,Student.hbm.xml来实现相应的ORM:

public class Student
{
	private String id;
	
	private String cardId;
	
	private String name;
	
	private int age;
	
	private Team team;
}


这时需要对Team.hbm.xml进行一些更改,也就是map的key和value键对的更改

将<!-- index表示student表中的键值(id),也是map集合中的key值 -->
<index column="name" type="java.lang.String"/>

<!-- element表示map集合中的value值 -->
<element column="description" type="java.lang.String"  />改为:
<!-- index表示student表中的键值(id),也是map集合中的key值 -->
			<index column="card_id" type="java.lang.String"/>
			
			
			<!-- 指定many方的类型 -->
			<one-to-many class="map.Student"/>


这时需要新建一个Student.hbm.xml文件来负责Student的映射。

<class name="Team" table="test_team">

		<id name="id" column="id" type="string">
			<generator class="uuid">
			</generator>
		</id>

		<property name="teamName" column="team_name" type="string" />
	
	
		
		<!-- 对于map,有专门的map映射标签 -->
		 
	 <!-- 告诉hibernate students是一个map对象 -->
	 <map name="students" table="test_student" cascade="all">   <!-- table属性表示所对应的map在数据库中的表名 -->
			
			<!-- key表示student表中与team所对应的外键 -->
			<key column="team_id"/>
			
			<!-- index表示student表中的键值(id),也是map集合中的key值 -->
			<index column="card_id" type="java.lang.String"/>
			
			
			<!-- 指定many方的类型 -->
			<one-to-many class="map.Student"/>
							
			 
			
		 </map>
		 
		 
	</class>


执行程序, 会产生如下的SQL语句:
create table test_student (id number(10,0) not null,
card_id varchar2(255 char),
name varchar2(255 char),
age number(10,0),
team_id varchar2(255 char),
primary key (id));


create table test_team (id varchar2(255 char) not null,
team_name varchar2(255 char),
primary key (id));


alter table test_student add constraint FK_dk062403lt7507oncwn9uo4ro foreign key (team_id) references test_team;



插入
这里就可以把大量的Student的元素插入进去了。

	Session session=HibernateUtil.openSession();
		
		Transaction tx=session.beginTransaction();
		
		Team team=new Team();
		
		team.setTeamName("english");
		
		Map map=team.getStudents();
		
		Student s1=new Student(null,"1","alleni",20,team);
		Student s2=new Student(null,"2","eline",21,team);
		
		
		map.put("111", s1);
		
		map.put("222", s2);
		
		session.save(team);
	    
		tx.commit();



  • 大小: 68.7 KB
分享到:
评论

相关推荐

    hibernate map 集合映射

    这篇文章将深入探讨Hibernate中的集合映射机制,包括其基本概念、类型以及如何在实际开发中进行配置。 ### 1. Hibernate集合映射的基本概念 集合映射是Hibernate中一个核心的概念,它允许我们将数据库表中的多对一...

    Hibernate 参数配置详解

    ### Hibernate 参数配置详解 #### 一、概述 Hibernate 是一款流行的 Java 持久层框架,它通过提供一套丰富的 API 和配置选项来简化数据库访问。本文档将深入探讨 Hibernate 的核心配置参数及其功能,帮助开发者更...

    hibernate多数据库配置

    Hibernate 多数据库配置 在 Hibernate 中配置多数据库,并自由切换,可以使用 Spring 框架来实现。下面是一个简单的配置示例: 首先,创建一个父数据源(parentDataSource),用于配置多个数据源共有的信息: ```...

    常用 Hibernate 映射配置说明.doc

    ### 常用Hibernate映射配置详解 #### 1. hibernate-mapping节点解析 `hibernate-mapping`节点是Hibernate映射文件中的顶级节点,用于定义一系列配置选项,控制整个映射文件的行为和映射规则。这些配置包括数据库...

    Hibernate使用 Map实现多对多映射

    以下是关于Hibernate使用Map实现多对多映射的具体知识点: 1. **数据库结构**: - `team2`表存储团队信息,包含字段`id`和`name`。 - `member2`表存储成员信息,包含字段`id`、`name`和`age`。 - `memberAtTeams...

    Hibernate中List信息的配置

    在探讨Hibernate中List信息的配置时,我们主要聚焦于如何在ORM(对象关系映射)框架下有效地管理和操作集合类型,尤其是List、Set以及Map。本文将深入解析List与Set在Hibernate中的映射机制,同时也会简要提及Map的...

    Hibernate可选配置大全

    ### Hibernate可选配置详解 #### 一、Hibernate配置项概览 Hibernate作为一款优秀的Java持久层框架,提供了丰富的配置选项,以适应不同场景下的需求。本文档将详细解析Hibernate的各种可选配置,帮助开发者深入...

    Hibernate映射配置实例大全(详细总结)

    "Hibernate映射配置实例大全"是一个全面深入的资源,旨在帮助开发者理解和掌握如何有效地配置Hibernate以实现对象关系映射(ORM)。在这个文档中,我们将探讨各种关键的映射配置方法,以及相关的实例。 首先,我们...

    Spring集成的Hibernate配置二级缓存

    3. **配置Spring整合Hibernate**:在Spring的配置文件(如applicationContext.xml)中,我们需要配置Hibernate SessionFactory,并指定缓存相关的bean。例如: ```xml ...

    hibernate参数配置

    8. **hibernate.default_entity_mode**: 指定SessionFactory打开的Session的默认实体表现模式,可以是`dynamic-map`、`dom4j`或`pojo`。 9. **hibernate.order_updates**: 开启后,Hibernate会按照主键顺序执行SQL...

    hibernate配置参数详解

    这个配置项指定了Hibernate实体映射的默认模式,常见的有`pojo`、`dynamic-map`等。 9. **`hibernate.order_updates`**: 是否按顺序更新记录。 ```properties hibernate.order_updates=true ``` 设置为`true`...

    Hibernate 参数设置一览表.doc

    8. **hibernate.default_entity_mode**:定义了SessionFactory打开的Session中实体的表示形式,可以是`dynamic-map`、`dom4j`或`pojo`。 9. **hibernate.order_updates**:当设置为`true`时,Hibernate会按主键顺序...

    hibernate 配置属性参数详情(全)

    8. **hibernate.default_entity_mode**:指定Session使用的实体表示模式,如`dynamic-map`、`dom4j`或`pojo`。 9. **hibernate.order_updates**:如果开启,按主键顺序排序更新操作,减少死锁的可能性。 10. **...

    hibernate 详细配置

    【hibernate 详细配置】是指在Java应用中配置Hibernate框架的过程,这涉及到一系列的属性设置,以便让Hibernate能够与特定的关系数据库进行有效交互并优化性能。以下是对这些配置属性的详细说明: **1. hibernate....

    让hibernate输出sql语句参数配置.doc

    Hibernate 配置参数详解 Hibernate 是一个流行的 ORM(Object-Relational Mapping)框架,广泛应用于 Java 企业应用开发中。为了提高 Hibernate 框架下的对象效率和开发效率,需要对其进行合理的配置。下面将详细...

    hibernate[1].cfg.xml中配置信息详解

    ### Hibernate配置文件详解 #### 一、概述 Hibernate是一个强大的对象关系映射(ORM)框架,它能够将Java对象映射到数据库中的记录,并管理这些记录的生命周期。为了确保Hibernate能够正确地工作,我们需要在`...

    spring2+hibernate3典型配置

    此外还有一个数据库配置文件 `jdbc.properties` 以及一个包含其他配置文件的文件夹 `config/map`。 ##### 1. `jdbc.properties` 这是配置数据库连接信息的文件,主要包括以下几个参数: - `jdbc.driverClassName`...

    Hibernate配置文件中映射元素详解

    【Hibernate配置文件中映射元素详解】 在对象关系映射(ORM)框架Hibernate中,对象与数据库表之间的关联是通过一个XML配置文件来定义的。这个XML文件包含了映射元素,用于描述Java类如何转化为数据库中的表。映射...

    hibernate配置文件以及类映射文件常用写法1

    《Hibernate配置文件与类映射详解》 Hibernate作为一款强大的对象关系映射(ORM)框架,简化了Java应用与数据库之间的交互。本文将深入探讨Hibernate的配置文件和类映射文件的常用写法,帮助开发者更好地理解和应用...

    Hibernate配置

    ### Hibernate配置详解 #### 一、引言 Hibernate是一个强大的对象关系映射(ORM)框架,它极大地简化了Java应用程序与关系型数据库之间的交互过程。为了确保Hibernate能够高效且正确地工作,合理配置其参数至关...

Global site tag (gtag.js) - Google Analytics