- 浏览: 364492 次
- 来自: 北京
文章分类
- 全部博客 (237)
- XML (6)
- JavaSE (39)
- Junit (1)
- Maven (10)
- JavaScript (12)
- JavaEE (16)
- HTML5 (10)
- java多线程 (8)
- Hibernate (30)
- Java反射 (3)
- Spring (11)
- Struts (1)
- svn (2)
- linux (12)
- 代码实例 (1)
- 设计模式 (1)
- UML (1)
- javassist (1)
- Oracle (3)
- Hibernate异常 (9)
- DWR (6)
- Java泛型 (2)
- SpringMVC (11)
- Dbunit (3)
- github (2)
- Algorithm (1)
- zTree (1)
- jquery (7)
- freemarker (4)
- mysql (5)
- ffmpeg (1)
- 编码 (1)
- lucene (15)
- hadoop (1)
- JVM (1)
- Regular Expressions (5)
- myeclipse (1)
- 爬虫 (7)
- 加密 (3)
- WebService (2)
- Socket (2)
- Windows (1)
最新评论
-
wxpsjm:
好直接
HV000030: No validator could be found for type: java.lang.Integer. -
wxhhbdx:
学习了,对新手来说很不错的教程。
SpringMVC入门 (二) 数值传递 -
xgcai:
正好在学dwr
DWR入门 (二)用户实例
摘自圣思园022.Hibernate映射Map详解
应用场景:
这里有一个Team类和一个Student类,
Team类代码如下:
一个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
=============================================================================
生成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值。
=============================================================================
插入
插入之后数据库如下:
===============================================
二: 配置Team+Student
以上的代码是通过设置map映射来完成Object Relational Mapping.
在该示例中,并没有加入Student.java和Student.hbm.xml。Student的数据库Entity纯粹通过Team.hbm.xml文件中的配置来生成。
接下来看看如何通过创建Student.java,Student.hbm.xml来实现相应的ORM:
这时需要对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" />改为:
这时需要新建一个Student.hbm.xml文件来负责Student的映射。
执行程序, 会产生如下的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的元素插入进去了。
应用场景:
这里有一个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();
发表评论
-
Connection is read-only. Queries leading to data modification are not allowed。
2014-04-06 21:52 3646<tx:advice id="txAdvic ... -
org.hibernate.HibernateException: No Session found for current thread
2014-04-06 12:37 0今天在maven中整合spring和hibernate,并使用 ... -
select new Topic from ' Mysql 生成SQL语句错误
2014-03-30 22:51 1615Caused by: com.mysql.jdbc.exce ... -
Unable to locate appropriate constructor on class
2014-02-20 00:11 1418org.hibernate.hql.internal.ast. ... -
Hibernate的load和get实际应用区分简单实例
2013-12-18 11:58 827今天在看孔浩的CMS视频时候看到的。 在57 -文章管理06 ... -
自定义OpenSessionInViewer过滤器
2013-12-11 12:12 994摘自孔浩视频 spring部分-17_spring_SSH整合 ... -
数据库事务 (三)虚读(Phantom Read)
2013-12-01 13:21 0关于各种读 虚读 phantom read: 转自维基 ... -
Hibernate悲观锁
2013-11-30 17:30 0为了防止两个线程同时修改一个数据,造成更新数据丢失,我们可以使 ... -
Hibernate查询HQL实例
2013-11-29 15:56 1250三个实体类对象: public class Team { ... -
QBC与HQL检索
2013-11-28 17:39 0QBC(Query By Criteria) API提供了检索 ... -
Hibernate继承映射
2013-11-28 12:36 610继承映射分为三种情况 1.每个子类一张表 比如说有一个Pers ... -
Hibernate通过Composite-element配置外联表实例 (码)
2013-11-28 11:07 980摘自圣思园Hibenrate 26. 组件映射深度解析 -37 ... -
Hibernate配置复合主键 composite primary key (二)
2013-11-27 16:41 1403摘自圣思园Hibernate 26.组件映射深度解析 上一篇 ... -
Hibernate配置复合主键 composite primary key (一)
2013-11-27 14:15 2405这篇是关于如何配置Hibernate实现复合主键的映射功能。 ... -
Hibernate通过Comparator接口自定义排序规则
2013-11-25 20:42 2469摘自圣思园 Hibernate25.自定义内存排序器详解及符合 ... -
Hibernate配置Set和List
2013-11-25 10:44 1838========================Set==== ... -
Hibernate多对多配置
2013-11-21 22:39 840场景: Student和Course,每一个Student有多 ... -
Hibernate延迟加载案例 (多: 一: 一,附代码)
2013-11-21 17:41 556摘自圣思园Hibernate20.一 ... -
Hibernate一对一配置
2013-11-20 21:49 996摘自圣思园 19.Hibernate的对象检索策略深度解析.a ... -
Hibernate的对象检索策略 (一) SQL左外连接检索策略
2013-11-20 15:32 1092首先是测试表的结构: 先通过hibernate将数据放入 ...
相关推荐
01 01Hibernate_Handwork : 手工配置使用Hibernate,其中详细标了Hibernate进行持久化的一些过程,因为是Hibernate的入门实例,所以注释很详细,其中有session的关闭后重建问题。 02 02Hibernate_UseMyEclipse: 利用...
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只会启动的时候引入一个文件,那就是:hibernate.cfg.xml mapping需要我们在hibernate中引入, <mapping resource=com/hibernate/test/hibernate_IP.xml/> ...
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. 值类型的集合 ...
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. 值类型的集合 ...
3.1 创建Hibernate的配置文件 3.2 创建持久化类 3.3 创建数据库Schema 3.4 创建对象-关系映射文件 3.4.1 映射文件的文档类型定义(DTD) 3.4.2 把Customer持久化类映射到CUSTOMERS表 3.5 通过...
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之旅 1.2. 第一个可持久化类 1.3. 映射cat 1.4. 与猫同乐 1.5. 结语 2. 体系结构 2.1. 总览 2.2. JMX集成 2.3. JCA支持 3. SessionFactory配置 3.1. 可编程配置方式...
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中配置set,list,map,bag等集合映射
* 9.increnment 插入数据的时候hibernate会给主键添加一个自增的主键,但是一个hibernate实例就维护一个计数器,所以在多个实例运行的时候不能使用这个方法。 * 例:@GeneratedValue(generator = ...
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. 值类型的集合 ...
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. 值类型的集合 ...
8.3. 组件作为Map的索引(Components as Map indices ) 8.4. 组件作为联合标识符(Components as composite identifiers) 8.5. 动态组件 (Dynamic components) 9. 继承映射(Inheritance Mappings) 9.1. 三种策略 ...
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. 值类型的集合...
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. 值类型的集合 ...
@TemporalType.(DATE,TIME,TIMESTAMP) 分别Map java.sql.(Date, Time, Timestamp). @Lob 注解属性将被持久化为 Blog 或 Clob 类型。具体的java.sql.Clob, Character[], char[] 和 java.lang.String 将被持久化为 ...
缓存可以简单的看成一个 Map ,通过 key 在缓存里面找 value 。 一、缓存简介 Cache In Hibernate HIBERNATE 中的 CACHE 有两级 . 一级是在 Session 范围内的 CACHE . 即每个 Session 有自己的一个 CACHE, 当前...
开始Hibernate之旅 1.2. 第一个可持久化类 1.3. 映射cat 1.4. 与猫同乐 1.5. 结语 2. 体系结构 2.1. 总览 2.2. JMX集成 2.3. JCA支持 3. SessionFactory配置 3.1. 可编程配置方式...