- 浏览: 2046285 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (795)
- java (263)
- 聚类搜索引擎 (9)
- 经验之谈 (67)
- DSP (3)
- C++ (140)
- Linux (37)
- SNMP (6)
- Python (6)
- 数据库 (61)
- 网络 (20)
- 算法 (15)
- 设计模式 (4)
- 笔试题 (38)
- 散文 (35)
- 数据结构 (9)
- 银行知识 (0)
- 榜样 (9)
- Lucene (15)
- Heritrix (6)
- MetaSeeker (0)
- netbeans (12)
- php (3)
- 英语 (8)
- DB2 (0)
- java基础 (5)
- mongodb & hadoop (4)
- Javascript (7)
- Spring (4)
- ibatis & myibatis (1)
- velocity (1)
- 微服务 (0)
- paddle (1)
- 第三方 (0)
- 知识沉淀 (1)
- 建模 (0)
最新评论
-
0372:
标示对java很陌生!
中文乱码解决的4种方式 -
梦留心痕:
Java中\是转意字符, 可是你的这句话我没看懂,只要把得到的 ...
java中如何忽略字符串中的转义字符--转载 -
yanjianpengit:
[b][/b]
java为什么非静态内部类里面不能有静态成员 -
springdata-jpa:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
eclipse 如何把java项目转成web项目 -
qq1130127172:
,非常好。
(转)SpringMVC 基于注解的Controller @RequestMapping @RequestParam..
对于hibernate中,集合属性在Hibernate的映射文件中绝对是个非常重要的内容,理解和熟练掌握常用的集合属性则显得更为重要.这里,阿堂根据自己的学习所得体合,参考有关文章的基础上,自己建表和亲自动手写了大部分代码,并且将测试结果以图示的效果放到博客上,供朋友们学习,希望能对朋友们有所帮助,阿堂更希望朋友们参与交流和讨论来共同提高!
集合属性大致有两种:第一种是单纯的集合属性,例如像List,Set或数组等集合属性;还有一种就是Map结构的集合属性。每个属性都有对应的key映射.
集合属性的元素大致有如下几种:
list:用于映射List集合属性.
set:用于映射Set集合属性.
map:用于映射Map集合属性.
bag:用于映射无序集合
idbag:用于映射无序集合,但为集合增加逻辑次序..
这里阿棠就主要以list,set,map三种用得较多的情况,举例说明(图示+代码)
list是有序集合,因此持久化类到数据库时必须增加一列来表示集合元素的次序。看下面的持久化类,该person类有个集合属性schools,该属性对应多个学校。集合属性只能以接口声明。例如在下面的代码中,schools的类型只能是List,不能是ArrayList,但该集合属性必须使用实现类完成初始化.
public class Person implements java.io.Serializable {
// Fields
private static final long serialVersionUID = -7919195903369450389L;
private Integer id;
private Integer age;
private String name;
//集合属性list:学校
private List schools=new ArrayList();
// Constructors
public Person() {
}
// Property accessors
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getAge() {
return this.age;
}
public void setAge(Integer age) {
this.age = age;
}
public List getSchools() {
return schools;
}
public void setSchools(List schools) {
this.schools = schools;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
该持久化类的标识属性和普通属性的映射与前面相同,不同的是增加了集合属性。对本例的List集合属性,应该使用list元素完成映射。list元素要求list-index的子元素来映射有序集合的次序列。集合属性的值不可能与持久化类存储在同一个表内,集合属性会存存放在另外的表中,因此,必须以外键关联.以key元素来映射该外键列。下面是该持久化尖的映射文件.
有了pojo,也有了映射文件,该类可以完成持久化操作访问,用于完成持久化的主程序如下
public class PersonManager
{
public static void main(String[] args)
{
PersonManager mgr = new PersonManager();
mgr.createAndStorePerson();
HibernateUtil.sessionFactory.close();
}
private void createAndStorePerson()
{
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();
Person yeeku = new Person();
yeeku.setAge(29);
yeeku.setName("aaa");
List l = new ArrayList();
l.add("小学");
l.add("中学");
yeeku.setSchools(l);
session.save(yeeku); tx.commit();
HibernateUtil.closeSession();
}
}
所建数据表及运行效果图示如下
use hibernate
create table person
(
id int identity(1,1) primary key not null,
name varchar(20) not null,
age int not null,
)
create table school
(
id int identity(1,1) primary key not null,
personid int constraint fk_person_school foreign key(personid) references person(id) not null,
list_order int not null,
school_name varchar(20) not null
)
程序运行结束后,数据库将生成两个表: 一个表用于保存持久化类Person的基本属性,别一个表school将用于保存集合属性schools
二.set集合属性
------------------------------------------------------------
public class Person implements java.io.Serializable {
// Fields
private static final long serialVersionUID = -7919195903369450389L;
private Integer id;
private Integer age;
private String name;
//集合属性list:学校
private Set schools = new HashSet();
// Constructors
public Person() {
}
// Property accessors
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getAge() {
return this.age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set getSchools() {
return schools;
}
public void setSchools(Set schools) {
this.schools = schools;
}
}
---------------------------------------------------------------
public class PersonManager
{
public static void main(String[] args)
{
PersonManager mgr = new PersonManager();
mgr.createAndStorePerson();
HibernateUtil.sessionFactory.close();
}
private void createAndStorePerson()
{
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();
Person yeeku = new Person();
yeeku.setAge(29);
yeeku.setName("aaa");
Set s = new HashSet();
s.add("小学");
s.add("中学");
yeeku.setSchools(s);
session.save(yeeku);
tx.commit();
HibernateUtil.closeSession();
}
}
---------------------------------------------------------------------
Set集合属性的映射与List非常相似,但因为Set是无序、不可得复的集合。因此,set元素无须使用index元素来指定集合元素的次序.与list相同的是.Set集合属性同样需要外键列,用于持久化类的集合属性的关联。
Set集合属性声明时,只能使用Set接口,不能使用实现类.
将上面示例的List集合属性改为Set集合属性即可,程序就不再重复了
映射文件夹也与List集合属性的映射相似,区别在于set元素,无须增加index列来保存元素的次序。下面是Set集合的属性的映射文件.
-------------------------------------------------------------------------
上面的映射文件中,element元素用于映射集合属性里的每个元素,该元素有个not-null属性,该属性默认为false,即该列默认为空.
对于List和Set两种集合属性,List集合的元素有顺序,而Set集合属性的元素没有顺序。当集合属性在另外的表中存储时,List集合属性可以用关联持久化类的外键和集合次序作为联合主键。但Set集合没有次序列,则以关联持久化类的外键和元素列作为联合主键,前提是元素不能为空(element不能为空,该表才有联合主键,否则该表没有主键)
use hibernate
create table person
(
id int identity(1,1) primary key not null,
name varchar(20) not null,
age int not null,
)
create table school
(
id int identity(1,1) primary key not null,
personid int constraint fk_person_school foreign key(personid) references person(id) not null,
school_name varchar(20) not null
)
三.Map集合属性
Map集合属性不仅需要映射属性value,还需要映射属性key。映射Map集合属性时,同样需要外键列,同时还必须指定Map的key列。显然,系统将以键列和key类作为联合主键。
与所有集合属性类似的是,集合属性的声明只能使用接口。
看下面的pojo类:
public class Person implements java.io.Serializable {
// Fields
private static final long serialVersionUID = -7919195903369450389L;
private Integer id;
private Integer age;
private String name;
//集合属性list:学校
private Map scores=new HashMap();
// Constructors
public Person() {
}
// Property accessors
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getAge() {
return this.age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Map getScores() {
return scores;
}
public void setScores(Map scores) {
this.scores = scores;
}
}
-----------------------------------------------
配置文件
<class name="Person">
<id name="id" column="personid">
<generator class="identity"/>
</id>
<property name="name"/>
<property name="age"/>
<map name="scores" table="score">
<key column="personid" not-null="true"/>
<map-key column="xueke" type="string"/>
<element column="fenshu" type="float"/>
</map>
</class>
------------------------------------------------------------
public class PersonManager
{
public static void main(String[] args)
{
PersonManager mgr = new PersonManager();
mgr.createAndStorePerson();
HibernateUtil.sessionFactory.close();
}
private void createAndStorePerson()
{
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();
Person yeeku = new Person();
yeeku.setAge(29);
yeeku.setName("aaa");
Map m = new HashMap();
m.put("语文" , new Float(56f));
m.put("英文" , new Float(23f));
yeeku.setScores(m);
session.save(yeeku);
tx.commit();
HibernateUtil.closeSession();
}
}
-----------------------------------------
use hibernate
create table person
(
id int identity(1,1) primary key not null,
name varchar(20) not null,
age int not null,
)
create table score
(
id int identity(1,1) primary key not null,
personid int constraint fk_person_school foreign key(personid) references person(id) not null,
xueke varchar(20) not null,
fenshu float not null
)
Map集合属性应使用ma元素需要key和map-key两个子元素。其中key子元素用于映射外键列,而map-key则用于映射Map集合的key.该持久化类的映射文件如下.
程序运行结束后,保存集合属性scores的表将以personid和xueke作为联合主键.
注意:map-key和element元素都必须确定type属性.
发表评论
-
利用JDBC获取新插入记录id的三种方法
2016-11-12 20:26 1888在一对多的关联操作中,通常在一方插入记录后,需要获取到当前记 ... -
Selector 和 Paging
2015-10-10 11:19 1590import java.util.List; impo ... -
Hibernate Dao辅助类,提供Dao的基本操作
2015-10-10 10:50 3650import java.io.Serializable; ... -
批处理batch,执行多个SQL语句
2015-07-15 19:21 10609批处理batch,执行多个SQL语句。 ... -
Mysql字符集设置(转)
2015-05-08 20:00 1274最近,在项目组使用 ... -
MySQL的btree索引和hash索引的区别
2015-03-27 17:24 17486Hash 索引结构的特殊性,其检索效率非常高,索引的检索 ... -
关于MYSQL Innodb 锁行还是锁表
2015-03-18 10:08 1967关于mysql的锁行还是锁表,这个问题,今天算是有了一点头 ... -
XA分布式事务处理
2014-08-22 18:06 1652在谈到 XA 规范之前,必须首先了解分布式事务处理( Dis ... -
sql中in 与exists
2014-07-15 12:46 1381NOT IN SELECT DISTINCT MD001 ... -
hibernate的query.scroll()和query.setFirstResult(),query.setMaxResults();
2014-07-01 08:19 2020一、hibernate的query.scroll()和que ... -
长连接和短连接的区别
2014-06-25 16:46 3444短连接 连接->传输数据->关闭连接 HTTP是无 ... -
MySQL 读写分离
2014-06-24 15:20 0一 什么是读写分离 ... -
(转)mysql分表与分区表
2014-06-24 15:17 0一,什么是mysql分表,分区 什么是分表,从表面意思上看 ... -
MySQL表的分区
2014-06-24 15:08 0一、什么是表分区通俗地讲表分区是将一大表,根据条件分割成若 ... -
数据库表的拆分
2014-06-24 14:37 2653下面来分析一下: ... -
(转)聚集索引
2014-06-15 14:47 1081在上一篇文章中,我们已经介绍了非聚集索引相关的内容。在本篇 ... -
Google的神器
2014-05-28 21:31 11151 Chubby http://blog.csd ... -
LSM树--高效的存储
2014-05-10 09:11 3168转http://bofang.iteye.com/blog/ ... -
(转)一致性哈希算法
2014-05-08 21:58 1191转帖:http://mntms.iteye.com/blog ... -
Jedis使用
2014-05-08 21:33 1490目录 1 JEDIS简介 1 2 JEDIS简单使用 1 3 ...
相关推荐
在给定的文档中,我们看到一个例子,展示了如何在 Hibernate 中配置一个具有集合属性的实体类 `Person`,以及如何通过映射文件启用延迟加载。`Person` 类拥有一个 `Set<Address>` 类型的 `addresses` 属性,表示个人...
在Java持久化框架Hibernate中,映射集合属性是常见的需求,特别是对于那些具有一对多、多对多关系的实体对象。这里的"List"是Java集合框架中的一个接口,用于存储一组有序的元素,而在Hibernate中,它常用来映射...
本资料重点探讨的是Hibernate对集合属性的操作,这是在实际项目开发中常见的需求,例如处理一对多、多对一、多对多等关联关系。下面将详细介绍Hibernate对集合属性的管理和操作。 1. **集合类型**:在Hibernate中,...
本主题将深入探讨Hibernate集合映射与关联关系,包括"student与Score的Map集合关系"、"student与class的多对一"以及"一对多映射"的概念。 首先,让我们理解一下Hibernate中的集合映射。在关系型数据库中,一个实体...
**标题:Hibernate集合映射** **正文:** Hibernate作为Java领域中最流行的ORM(对象关系映射)框架之一,它的核心功能之一就是实现Java对象与数据库表之间的映射。集合映射是Hibernate中一个非常关键的概念,它...
在Java的持久化框架Hibernate中,集合映射是将数据库中的表关系映射到对象的集合属性上,以便实现对象关系映射(ORM)。本文将深入探讨Hibernate中的四种主要集合映射类型:Set、List、Array和Map,以及它们在实际...
在Java的持久化框架Hibernate中,集合映射是将数据库中的表关系映射到对象的集合属性上,以便更好地管理和操作数据。这篇文章将深入探讨Hibernate中的集合映射机制,包括其基本概念、类型以及如何在实际开发中进行...
4. **集合属性映射**:在实体类中,集合属性需要使用`@OneToMany`或`@ManyToMany`注解进行声明,并通过`mappedBy`指定反向关联的属性。 ```java @Entity public class User { @OneToMany(mappedBy = "user") ...
《Hibernate集合映射详解》 Hibernate作为Java领域中的一款强大持久化框架,其核心功能之一就是对象关系映射(ORM),使得开发者可以方便地在Java对象与数据库表之间进行交互。其中,集合映射是Hibernate中非常关键...
这里,`propertyName`是Java对象中的集合属性名,`inverse="true"`表示子表的维护由父表负责,`key column`是外键列名,`one-to-many`指定与bag关联的实体类。 2. **注解映射**:如果使用注解,映射将在Java实体类...
在Java的持久化框架Hibernate中,集合映射是将数据库中的表与Java对象的集合属性关联的过程。List集合映射是其中常见的一种方式,它允许我们将数据库中的一组相关记录映射到Java对象的List列表中。这种映射机制使得...
在深入探讨Hibernate集合映射中的`inverse`与`cascade`属性之前,我们首先需要理解Hibernate框架的基本概念。Hibernate是一个开放源代码的对象关系映射(ORM)框架,它为Java应用程序提供了一种将对象模型与数据库...
它可以将实体类中的集合属性映射到数据库的多对多、一对多关系上,实现复杂的数据关联。例如,一个用户可能有多个订单,这种关系就可以通过集合映射来实现。 #### 4. **枚举类型映射** 枚举类型在许多场景下非常...
在实际开发中,我们常常会遇到Java对象中包含集合属性的情况,例如一个学生可能有多个课程,一个课程可能有多个学生。这种一对多或多对多的关系就需要通过集合映射来实现。本文将深入讲解Hibernate中的集合映射,...
在Hibernate中,当从数据库加载一个实体时,默认情况下其实体的集合属性会被配置成延迟加载。这意味着集合属性中的数据并非立即加载到内存中,而是在第一次访问这些集合属性时才触发加载动作。这样的设计可以避免...
### JAVA培训-HIBERNATE的集合映射 #### 概述 本文主要聚焦于Hibernate框架下的集合映射机制,特别是针对`Set`、`List`、`Array`、`Map`、`Bag`五种集合...希望本文能帮助读者更好地理解和应用Hibernate集合映射技术。
在给出的文件名称列表中,"spring"可能指的是Spring框架的相关jar包,但具体还需查看压缩包内容以了解完整的依赖集合。 综上所述,Spring MVC和Hibernate的集成使用涉及到了Web应用开发的多个层面,包括控制层、...