Hibernate的Map配置_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Hibernate的Map配置

Hibernate的Map配置

 2013/11/23 18:26:13  alleni123  程序员俱乐部  我要评论(0)
  • 摘要:摘自圣思园022.Hibernate映射Map详解应用场景:这里有一个Team类和一个Student类,Team类代码如下:publicclassTeam{privateStringid;privateStringteamName;/***将学生对象集合定义为一个map*/privateMapstudents=newHashMap();}一个team中可以包含多个student,这些student被放在一个map集合中。此时生成的数据库表格就是:Team->id,nameStudent
  • 标签:Map 配置 hibernate
摘自圣思园022.Hibernate映射Map详解


应用场景:
这里有一个Team类和一个Student类,
Team类代码如下:
class="java">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
  • 查看图片附件
上一篇: php面向对象相关 下一篇: 没有下一篇了!
发表评论
用户名: 匿名