`

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
分享到:
评论

相关推荐

    Hibernate3.1_学习源码

    01 01Hibernate_Handwork : 手工配置使用Hibernate,其中详细标了Hibernate进行持久化的一些过程,因为是Hibernate的入门实例,所以注释很详细,其中有session的关闭后重建问题。 02 02Hibernate_UseMyEclipse: 利用...

    hibernate 体系结构与配置 参考文档(html)

    Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 1.3.5...

    详解 hibernate mapping配置

    详解 hibernate mapping配置 每个hibernate只会启动的时候引入一个文件,那就是:hibernate.cfg.xml mapping需要我们在hibernate中引入, &lt;mapping resource=com/hibernate/test/hibernate_IP.xml/&gt; ...

    Hibernate+中文文档

    1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 ...

    hibernate3.2中文文档(chm格式)

    1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     3.1 创建Hibernate的配置文件  3.2 创建持久化类  3.3 创建数据库Schema  3.4 创建对象-关系映射文件  3.4.1 映射文件的文档类型定义(DTD)  3.4.2 把Customer持久化类映射到CUSTOMERS表  3.5 通过...

    HibernateAPI中文版.chm

    1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 ...

    hibernate 教程

    开始Hibernate之旅 1.2. 第一个可持久化类 1.3. 映射cat 1.4. 与猫同乐 1.5. 结语 2. 体系结构 2.1. 总览 2.2. JMX集成 2.3. JCA支持 3. SessionFactory配置 3.1. 可编程配置方式...

    Hibernate实战(第2版 中文高清版)

     2.1.3 Hibernate配置和启动   2.1.4 运行和测试应用程序   2.2 启动Java Persistence项目   2.2.1 使用Hibernate Annotations   2.2.2 使用Hibernate EntityManager   2.2.3 引入EJB组件   2.2.4 切换...

    hibernate 集合映射

    适合初学者了解在hibernate中配置set,list,map,bag等集合映射

    Hibernate注解

    * 9.increnment 插入数据的时候hibernate会给主键添加一个自增的主键,但是一个hibernate实例就维护一个计数器,所以在多个实例运行的时候不能使用这个方法。 * 例:@GeneratedValue(generator = ...

    Hibernate中文详细学习文档

    1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 ...

    Hibernate 中文 html 帮助文档

    1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 ...

    最全Hibernate 参考文档

    8.3. 组件作为Map的索引(Components as Map indices ) 8.4. 组件作为联合标识符(Components as composite identifiers) 8.5. 动态组件 (Dynamic components) 9. 继承映射(Inheritance Mappings) 9.1. 三种策略 ...

    Hibernate教程

    2.2.3. Hibernate配置 2.2.4. 用Ant编译 2.2.5. 安装和帮助 2.2.6. 加载并存储对象 2.3. 第二部分 - 关联映射 2.3.1. 映射Person类 2.3.2. 一个单向的Set-based关联 2.3.3. 使关联工作 2.3.4. 值类型的集合...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 ...

    Hibernate注释大全收藏

    @TemporalType.(DATE,TIME,TIMESTAMP) 分别Map java.sql.(Date, Time, Timestamp). @Lob 注解属性将被持久化为 Blog 或 Clob 类型。具体的java.sql.Clob, Character[], char[] 和 java.lang.String 将被持久化为 ...

    Hibernate_二级缓存总结

    缓存可以简单的看成一个 Map ,通过 key 在缓存里面找 value 。 一、缓存简介 Cache In Hibernate HIBERNATE 中的 CACHE 有两级 . 一级是在 Session 范围内的 CACHE . 即每个 Session 有自己的一个 CACHE, 当前...

    hibernate

    开始Hibernate之旅 1.2. 第一个可持久化类 1.3. 映射cat 1.4. 与猫同乐 1.5. 结语 2. 体系结构 2.1. 总览 2.2. JMX集成 2.3. JCA支持 3. SessionFactory配置 3.1. 可编程配置方式...

Global site tag (gtag.js) - Google Analytics