- 浏览: 117910 次
- 性别:
- 来自: 福建
文章分类
最新评论
-
wenbing2610:
其实用Struts实现图片上传比用Servlet实现容易多了。 ...
Struts2文件上传深入FileUploadInterceptor -
i_feng:
public class uploadImageAction ...
Struts2文件上传深入FileUploadInterceptor -
wenbing2610:
...
ognl.MethodFailedException
集合属性大致有两种:第一种是单纯的集合属性,如像 List、Set 或数组等集合属性;另一种是Map结构的集合属性,每个属性值都有对应的Key映射。
集合映射的元素大致有如下几种:
List: 用于映射 List 集合属性
Set: 用于映射 Set 集合属性
Map: 用于映射 Map 集合性
Array: 用于映射数组集合属性
Bag: 用于映射无序集合
idbag: 用于映射无序集合,但为集合增加逻辑次序
1. List 集合属性
List是有序集合,因此持久化到数据库时也必须增加一列来表示集合元素的次序。看下面的持久化类,该 News 类有个集合属性:schools ,该属性对应学校。而集合属性只能以接口声明,因此下面代码中,schools 的类型能是List ,不能是ArrayList ,但该集合属性必须使用实现类完成初始化。
Java代码
package cn.janwer;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
public class News implements Serializable {
int id;
String title;
String content;
private List schools = new ArrayList();
public String getContent() {
return content;
}
public void setContent(String content) {
this .content = content;
}
public int getId() {
return id;
}
public void setId( int id) {
this .id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this .title = title;
}
public List getSchools() {
return schools;
}
public void setSchools(List schools) {
this .schools = schools;
}
}
在作相应映射时,list元素要求用list-index的子元素来映射有序集合的次序列。集合的属性的值会存放有另外的表中,不可能与持久化类存储在同一个表内。因此须以外键关联,用Key元素来映射该外键列。
下面是该持久化类的映射文件:
Xml代码
" quality="high" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" style="line-height: 19px; ">
<xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="cn.janwer.News" table="news">
<id name="id" column="pid">
<generator class="identity"/>
</id>
<property name="title" length="50" column="TITLE"/>
<property name="content" length="50" column="CONTENT"/>
<list name="schools" table="school">
<key column="pid" not-null="true"/>
<list-index column="list_order" />
<element type="string" column="school_name"/>
</list>
</class>
</hibernate-mapping>
2. Set 集合属性
Set 集合属性映射与 List 非常相似,但因为 Set 是无序的,不可重复的集合。因此 set 元素无须使用 index 元素来指定集合元素次序。
映射文件与 List 相似,区别在于使用 set 元素时,无须增加 index 列来保存集合的次序。如下映射文件:
Xml代码
" quality="high" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" style="line-height: 19px; ">
<set name="schools" table="school">
<key column="pid" not-null="true"/>
<element type="string" column="school_name" not-null="true"/>
</set>
3. bag 元素映射
bag 元素既可以为 List 集合属性映射,也可以为 Collection 集合属性映射。不管是哪种集合属性,使用 bag 元素都将被映射成无序集合,而集合属性对应的表没有
Xml代码
" quality="high" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" style="line-height: 19px; ">
<bag name="school" table="schools" >
<key column="pid" not-null="true" />
<element ype="string" column="school_name"/>
</bag>
4. Map 集合属性
Map 不公需要映射属性值,还需要映射属性 Key 。映射 Map 集合属性时,同样需要指定外键列,同时还必须指定 Map 的 Key 列。显然,系统将以外键列和 Key 列作为联合主键。
与所有集合属性类似,属性声明只能使用接口,看下面的 POJO 类:
Java代码
private Map school=new HashMap();
public Map getSchool() {
return school;
}
public void setSchool(Map school) {
this.school=school;
}
Map 集合属性使用 map 元素映射时,该 map 元素需要 key 和 map-key 两个子元素。其中 key 子元素用于映射外键列,而 map-key 子元素则用于映射 Map 集合的 Key 。映射文件如下:
Xml代码
" quality="high" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" style="line-height: 19px; ">
<map name="school" table="schools">
<key column="pid" not-null="true" />
<map-key type="string" column="indet"/>
<element type="float" column="score"/>
</map>
注意:map-key 和 element 元素都必须确定type属性
5. 集合性能的分析
对于集合属性,通常推荐使用延迟加载策略。所谓延迟加载就是当系统需要使用集合属性时才从数据库装载关联的数据。 Hibernate对集合属性默认采用延迟加载,在某些特殊的情况下为 set,,list,map 等元素设置lazy="false" 属性来取消延迟加载。
可将集合分成如下两类:
有序集合:集合里的元素可以根据 Key 或 Index 访问
无序集合:集合里的元素中能遍历 有序集合的属性有增加、删除及修改中拥有较好的性能表现。在设计较好的 Hiberate domain Object 中,集合属性通常都会增加inverse="true" 的属性,此时集合端不再控制关联关系。映射 Set 集合属性时,如果 element 元素包括 not-null="true" 属性,则集合属性表以关联持久化类的外键和元素列作为联合主键,否则该表没有主键,但 List 集合属性的表总是以外键和元素次序列作为联合主键。
集合映射的元素大致有如下几种:
List: 用于映射 List 集合属性
Set: 用于映射 Set 集合属性
Map: 用于映射 Map 集合性
Array: 用于映射数组集合属性
Bag: 用于映射无序集合
idbag: 用于映射无序集合,但为集合增加逻辑次序
1. List 集合属性
List是有序集合,因此持久化到数据库时也必须增加一列来表示集合元素的次序。看下面的持久化类,该 News 类有个集合属性:schools ,该属性对应学校。而集合属性只能以接口声明,因此下面代码中,schools 的类型能是List ,不能是ArrayList ,但该集合属性必须使用实现类完成初始化。
Java代码
package cn.janwer;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
public class News implements Serializable {
int id;
String title;
String content;
private List schools = new ArrayList();
public String getContent() {
return content;
}
public void setContent(String content) {
this .content = content;
}
public int getId() {
return id;
}
public void setId( int id) {
this .id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this .title = title;
}
public List getSchools() {
return schools;
}
public void setSchools(List schools) {
this .schools = schools;
}
}
在作相应映射时,list元素要求用list-index的子元素来映射有序集合的次序列。集合的属性的值会存放有另外的表中,不可能与持久化类存储在同一个表内。因此须以外键关联,用Key元素来映射该外键列。
下面是该持久化类的映射文件:
Xml代码
" quality="high" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" style="line-height: 19px; ">
<xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="cn.janwer.News" table="news">
<id name="id" column="pid">
<generator class="identity"/>
</id>
<property name="title" length="50" column="TITLE"/>
<property name="content" length="50" column="CONTENT"/>
<list name="schools" table="school">
<key column="pid" not-null="true"/>
<list-index column="list_order" />
<element type="string" column="school_name"/>
</list>
</class>
</hibernate-mapping>
2. Set 集合属性
Set 集合属性映射与 List 非常相似,但因为 Set 是无序的,不可重复的集合。因此 set 元素无须使用 index 元素来指定集合元素次序。
映射文件与 List 相似,区别在于使用 set 元素时,无须增加 index 列来保存集合的次序。如下映射文件:
Xml代码
" quality="high" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" style="line-height: 19px; ">
<set name="schools" table="school">
<key column="pid" not-null="true"/>
<element type="string" column="school_name" not-null="true"/>
</set>
3. bag 元素映射
bag 元素既可以为 List 集合属性映射,也可以为 Collection 集合属性映射。不管是哪种集合属性,使用 bag 元素都将被映射成无序集合,而集合属性对应的表没有
Xml代码
" quality="high" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" style="line-height: 19px; ">
<bag name="school" table="schools" >
<key column="pid" not-null="true" />
<element ype="string" column="school_name"/>
</bag>
4. Map 集合属性
Map 不公需要映射属性值,还需要映射属性 Key 。映射 Map 集合属性时,同样需要指定外键列,同时还必须指定 Map 的 Key 列。显然,系统将以外键列和 Key 列作为联合主键。
与所有集合属性类似,属性声明只能使用接口,看下面的 POJO 类:
Java代码
private Map school=new HashMap();
public Map getSchool() {
return school;
}
public void setSchool(Map school) {
this.school=school;
}
Map 集合属性使用 map 元素映射时,该 map 元素需要 key 和 map-key 两个子元素。其中 key 子元素用于映射外键列,而 map-key 子元素则用于映射 Map 集合的 Key 。映射文件如下:
Xml代码
" quality="high" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" style="line-height: 19px; ">
<map name="school" table="schools">
<key column="pid" not-null="true" />
<map-key type="string" column="indet"/>
<element type="float" column="score"/>
</map>
注意:map-key 和 element 元素都必须确定type属性
5. 集合性能的分析
对于集合属性,通常推荐使用延迟加载策略。所谓延迟加载就是当系统需要使用集合属性时才从数据库装载关联的数据。 Hibernate对集合属性默认采用延迟加载,在某些特殊的情况下为 set,,list,map 等元素设置lazy="false" 属性来取消延迟加载。
可将集合分成如下两类:
有序集合:集合里的元素可以根据 Key 或 Index 访问
无序集合:集合里的元素中能遍历 有序集合的属性有增加、删除及修改中拥有较好的性能表现。在设计较好的 Hiberate domain Object 中,集合属性通常都会增加inverse="true" 的属性,此时集合端不再控制关联关系。映射 Set 集合属性时,如果 element 元素包括 not-null="true" 属性,则集合属性表以关联持久化类的外键和元素列作为联合主键,否则该表没有主键,但 List 集合属性的表总是以外键和元素次序列作为联合主键。
发表评论
-
CSS样式表的overflow属性
2015-01-02 19:22 28一、滚动条样式overflow ... -
jrebel运用
2014-07-13 22:00 1187JRebel热部署 ... -
JPA执行原生SQL截断Char类型问题
2014-05-24 21:39 1185在JPA的API中执行原生 ... -
JPA基本数据类型映射
2014-05-24 21:06 3901/** ... -
spring定时器配置
2014-03-18 21:36 690创建测试类: ... -
The Struts dispatcher cannot be found
2013-11-03 18:48 650运行环境:struts2环境中访 ... -
JasperException
2013-09-15 20:41 1014JasperException异常: ... -
equal symbol expected
2013-09-15 20:08 1180equal symbol ... -
Hibernate主键生成器
2013-09-12 21:11 787... -
Criterion和Criteria
2013-09-08 16:00 1943Hibernate Criter ... -
getHibernateTemplate用法
2013-09-08 15:02 580HibernateTemplate提供的方法 ... -
JS中页面跳转
2013-09-08 14:01 652<html><head><t ... -
GridPanel详解
2013-03-10 10:45 10321、Ext.grid.GridPanel ... -
tomcat内存溢出
2013-03-04 20:26 723在使用Java程序从数据库中查询大量的数据或 ... -
History Object
2013-01-07 21:06 750history 对象是window 对象的另一个子 ... -
Write to programmer
2012-12-29 20:16 853很多的java初级程序员对自己没有一个明确的方 ... -
EL语言
2012-09-27 22:08 891EL的前世今生: ... -
JSTL标签的使用
2012-09-27 22:00 805JSP 标准标记库( Standard Tag Library ... -
使用IBATIS防止sql注入
2012-08-26 21:17 1597对于ibaits参数引用可以使用#和$两 ... -
IBATIS动态SQL标签用法
2012-08-26 21:04 12451、动态SQL片段通过SQL片 ...
相关推荐
常见的集合映射类型有 Set、List、Array、Map 和 Bag 等,每种类型都有其特点和应用场景。 Set 集合映射 Set 集合是 Hibernate 中基础的集合类型,元素数据一般使用外键同主表关联。Set 集合非常适用于集合元素不...
在Hibernate的映射文件(.hbm.xml)中,我们通常使用`<set>`, `<list>`, `<map>`等标签来定义集合映射。每个标签都有对应的属性,例如: - `name`: 对象属性名。 - `table`: 所映射的数据库表名。 - `inverse`: ...
Hibernate支持多种集合映射类型,包括List、Set、Map、Bag、Array等。它们之间的区别主要在于元素的唯一性、顺序性和映射到数据库的实现方式。例如,List和Array维护元素的插入顺序,而Set不允许重复元素;Map则...
在给定的文档“JAVA培训-HIBERNATE的集合映射.doc”中,主要讲解了Hibernate如何处理不同类型的集合映射,包括Set、List、Array、Map和Bag。我们将详细讨论这些集合映射以及它们在实际应用中的使用。 首先,我们来...
在Java中,常见的集合类型有List、Set、Map等,它们在Hibernate中都有对应的映射方式。 1. **List映射**:List是最基础的集合类型,它允许元素重复并保持插入顺序。在Hibernate中,我们可以使用`<list>`标签来映射...
集合映射可以是 set、list、map、bag、array 等。级联策略控制可以控制集合元素的保存和删除。排序策略可以控制集合元素的顺序。 聚合映射 Hibernate 的聚合映射可以将多个对象聚合到一个对象中。聚合映射可以是...
在 Hibernate 中,可以通过 `<set>` 标签来配置 Set 集合的映射。下面详细介绍 `<set>` 标签的各个属性: - **name**:必须指定的属性,表示集合的名称。 - **access**:可选属性,指定访问策略。 - **table**:可...
在Hibernate中,集合可以通过`<set>`, `<list>`, `<map>`, `<bag>` 或 `<array>` 标签进行映射。每个标签对应不同的集合类型,例如: 1. `<set>`:对应Set接口,不允许有重复元素。 2. `<list>`:对应List接口,元素...
6. Bag、Set、List、Array、Map:用于表示集合类型的映射,如列表或映射关系。 NGen工具的主要功能是: 1. 预先编译:NGen会将IL(中间语言)代码转换为本机机器码,使得应用程序在运行时无需再进行JIT(Just-In-...
该属性仅存在于集合标记的元素中,如`<set>`、`<map>`、`<list>`、`<array>`和`<bag>`等。它的作用是决定是否将对集合对象的修改反映到数据库中。 - **Inverse 的作用** - **定义**:`inverse`属性决定了一端是否...
5. **集合类型**:`set`、`map`、`list`、`bag`、`array`等元素定义了集合类型在Hibernate中的实现方式。 6. **继承策略**:`subclass`、`joined-class`、`union-class`等元素用于定义不同的继承策略。 #### 三、...