- 浏览: 377588 次
- 来自: 北京
文章分类
- 全部博客 (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 3737<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 1661Caused by: com.mysql.jdbc.exce ... -
Unable to locate appropriate constructor on class
2014-02-20 00:11 1467org.hibernate.hql.internal.ast. ... -
Hibernate的load和get实际应用区分简单实例
2013-12-18 11:58 876今天在看孔浩的CMS视频时候看到的。 在57 -文章管理06 ... -
自定义OpenSessionInViewer过滤器
2013-12-11 12:12 1059摘自孔浩视频 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 1295三个实体类对象: public class Team { ... -
QBC与HQL检索
2013-11-28 17:39 0QBC(Query By Criteria) API提供了检索 ... -
Hibernate继承映射
2013-11-28 12:36 653继承映射分为三种情况 1.每个子类一张表 比如说有一个Pers ... -
Hibernate通过Composite-element配置外联表实例 (码)
2013-11-28 11:07 1022摘自圣思园Hibenrate 26. 组件映射深度解析 -37 ... -
Hibernate配置复合主键 composite primary key (二)
2013-11-27 16:41 1450摘自圣思园Hibernate 26.组件映射深度解析 上一篇 ... -
Hibernate配置复合主键 composite primary key (一)
2013-11-27 14:15 2456这篇是关于如何配置Hibernate实现复合主键的映射功能。 ... -
Hibernate通过Comparator接口自定义排序规则
2013-11-25 20:42 2528摘自圣思园 Hibernate25.自定义内存排序器详解及符合 ... -
Hibernate配置Set和List
2013-11-25 10:44 1885========================Set==== ... -
Hibernate多对多配置
2013-11-21 22:39 885场景: Student和Course,每一个Student有多 ... -
Hibernate延迟加载案例 (多: 一: 一,附代码)
2013-11-21 17:41 594摘自圣思园Hibernate20.一 ... -
Hibernate一对一配置
2013-11-20 21:49 1050摘自圣思园 19.Hibernate的对象检索策略深度解析.a ... -
Hibernate的对象检索策略 (一) SQL左外连接检索策略
2013-11-20 15:32 1141首先是测试表的结构: 先通过hibernate将数据放入 ...
相关推荐
这篇文章将深入探讨Hibernate中的集合映射机制,包括其基本概念、类型以及如何在实际开发中进行配置。 ### 1. Hibernate集合映射的基本概念 集合映射是Hibernate中一个核心的概念,它允许我们将数据库表中的多对一...
### Hibernate 参数配置详解 #### 一、概述 Hibernate 是一款流行的 Java 持久层框架,它通过提供一套丰富的 API 和配置选项来简化数据库访问。本文档将深入探讨 Hibernate 的核心配置参数及其功能,帮助开发者更...
Hibernate 多数据库配置 在 Hibernate 中配置多数据库,并自由切换,可以使用 Spring 框架来实现。下面是一个简单的配置示例: 首先,创建一个父数据源(parentDataSource),用于配置多个数据源共有的信息: ```...
### 常用Hibernate映射配置详解 #### 1. hibernate-mapping节点解析 `hibernate-mapping`节点是Hibernate映射文件中的顶级节点,用于定义一系列配置选项,控制整个映射文件的行为和映射规则。这些配置包括数据库...
以下是关于Hibernate使用Map实现多对多映射的具体知识点: 1. **数据库结构**: - `team2`表存储团队信息,包含字段`id`和`name`。 - `member2`表存储成员信息,包含字段`id`、`name`和`age`。 - `memberAtTeams...
在探讨Hibernate中List信息的配置时,我们主要聚焦于如何在ORM(对象关系映射)框架下有效地管理和操作集合类型,尤其是List、Set以及Map。本文将深入解析List与Set在Hibernate中的映射机制,同时也会简要提及Map的...
### Hibernate可选配置详解 #### 一、Hibernate配置项概览 Hibernate作为一款优秀的Java持久层框架,提供了丰富的配置选项,以适应不同场景下的需求。本文档将详细解析Hibernate的各种可选配置,帮助开发者深入...
"Hibernate映射配置实例大全"是一个全面深入的资源,旨在帮助开发者理解和掌握如何有效地配置Hibernate以实现对象关系映射(ORM)。在这个文档中,我们将探讨各种关键的映射配置方法,以及相关的实例。 首先,我们...
3. **配置Spring整合Hibernate**:在Spring的配置文件(如applicationContext.xml)中,我们需要配置Hibernate SessionFactory,并指定缓存相关的bean。例如: ```xml ...
8. **hibernate.default_entity_mode**: 指定SessionFactory打开的Session的默认实体表现模式,可以是`dynamic-map`、`dom4j`或`pojo`。 9. **hibernate.order_updates**: 开启后,Hibernate会按照主键顺序执行SQL...
这个配置项指定了Hibernate实体映射的默认模式,常见的有`pojo`、`dynamic-map`等。 9. **`hibernate.order_updates`**: 是否按顺序更新记录。 ```properties hibernate.order_updates=true ``` 设置为`true`...
8. **hibernate.default_entity_mode**:定义了SessionFactory打开的Session中实体的表示形式,可以是`dynamic-map`、`dom4j`或`pojo`。 9. **hibernate.order_updates**:当设置为`true`时,Hibernate会按主键顺序...
8. **hibernate.default_entity_mode**:指定Session使用的实体表示模式,如`dynamic-map`、`dom4j`或`pojo`。 9. **hibernate.order_updates**:如果开启,按主键顺序排序更新操作,减少死锁的可能性。 10. **...
【hibernate 详细配置】是指在Java应用中配置Hibernate框架的过程,这涉及到一系列的属性设置,以便让Hibernate能够与特定的关系数据库进行有效交互并优化性能。以下是对这些配置属性的详细说明: **1. hibernate....
Hibernate 配置参数详解 Hibernate 是一个流行的 ORM(Object-Relational Mapping)框架,广泛应用于 Java 企业应用开发中。为了提高 Hibernate 框架下的对象效率和开发效率,需要对其进行合理的配置。下面将详细...
### Hibernate配置文件详解 #### 一、概述 Hibernate是一个强大的对象关系映射(ORM)框架,它能够将Java对象映射到数据库中的记录,并管理这些记录的生命周期。为了确保Hibernate能够正确地工作,我们需要在`...
此外还有一个数据库配置文件 `jdbc.properties` 以及一个包含其他配置文件的文件夹 `config/map`。 ##### 1. `jdbc.properties` 这是配置数据库连接信息的文件,主要包括以下几个参数: - `jdbc.driverClassName`...
【Hibernate配置文件中映射元素详解】 在对象关系映射(ORM)框架Hibernate中,对象与数据库表之间的关联是通过一个XML配置文件来定义的。这个XML文件包含了映射元素,用于描述Java类如何转化为数据库中的表。映射...
《Hibernate配置文件与类映射详解》 Hibernate作为一款强大的对象关系映射(ORM)框架,简化了Java应用与数据库之间的交互。本文将深入探讨Hibernate的配置文件和类映射文件的常用写法,帮助开发者更好地理解和应用...
### Hibernate配置详解 #### 一、引言 Hibernate是一个强大的对象关系映射(ORM)框架,它极大地简化了Java应用程序与关系型数据库之间的交互过程。为了确保Hibernate能够高效且正确地工作,合理配置其参数至关...