`

[转]hibernate 集合类(Collections)映射(一)

阅读更多

Hibernate可以持久化以下java集合的实例, 包括java.util.Map, java.util.Set, java.util.SortedMap, java.util.SortedSet, java.util.List, 和任何持久实体或值的数组(使用Set集合类型是最好的选择)。类型为java.util.Collection或者java.util.List的属性还可以使用"bag"语义来持久。用于持久化的集合,除了集合接口外,不能保留任何实现这些接口的类所附加的语义(例如:LinkedHashSet带来的迭代顺序)。所有的持久化集合,实际上都各自按照 HashMap, HashSet, TreeMap, TreeSet  ArrayList 的语义直接工作。更深入地说,对于一个包含集合的属性来说,必须把Java类型定义为接口 (也就是Map, Set 或者List等),而绝不能是HashMap, TreeSet 或者 ArrayList。存在这个限制的原因是,在你不知道的时候,Hibernate暗中把你的Map, Set  List 的实例替换成了它自己的关于Map, Set 或者 List 的实现。(所以在你的程序中,谨慎使用==操作符。)(说明: 为了提高性能等方面的原因,Hibernate中实现了几乎所有的Java集合的接口(为了实现懒加载的一些特性) )所有的有序集合类(maps, lists, arrays)都拥有一个由<key>  <index> 组成的主键。 这种情况下集合类的更新是非常高效的——主键已经被有效的索引,因此当Hibernate试图更新或删除一行时,可以迅速找到该行数据。集合(sets)的主键由<key> 和其他元素字段构成。 对于有些元素类型来说,这很低效,特别是组合元素或者大文本、大二进制字段; 数据库可能无法有效的对复杂的主键进行索引。 另一方面,对于一对多、多对多关联,特别是合成的标识符来说,集合也可以达到同样的高效性能。( 附注:如果你希望SchemaExport 为你的<set> 创建主键, 你必须把所有的字段都声明为not-null="true" 。)<idbag> 映射定义了代理键,因此它总是可以很高效的被更新。事实上, <idbag> 拥有着最好的性能表现。Bag是最差的。因为bag允许重复的元素值 ,也没有索引字段,因此不可能定义主键。 Hibernate无法判断出重复的行。当这种集合被更改时,Hibernate将会先完整地移除 (通过一个(in a single DELETE ))整个集合,然后再重新创建整个集合。因此Bag是非常低效的。

 

 一、Set集合映射

 

我的前几篇文章,many-to-many, many-to-one中都用的是Set集合映射,在此不再累述。

 

  当实体类中有HashSet属性时,它是如何进行初始化的呢?当持久化这个实体类的一个实例,比如调用persist()方法进行了持久化时,hibernate将自动利用hibernate自己实现了Set接口的类替换掉HashSet。所以一定要防止出现如下所示的错误:

 

Java代码

HashSet<Employee> hSet = (HashSet<Employee>)depart.getEmps(); //Error 

 

HashSet<Employee> hSet = (HashSet<Employee>)depart.getEmps(); //Error

当运行时,会出现如下的异常:

 

java.lang.ClassCastException: org.hibernate.collection.PersistentSet cannot be cast to java.util.HashSet

 

分享到:
评论

相关推荐

    Hibernate教程16_集合映射

    在Java的持久化框架Hibernate中,集合映射是至关重要的一个概念,它允许我们将数据库中的表与Java对象的集合属性进行关联。本教程主要讲解了如何在Hibernate中配置和使用集合映射,以便更好地理解和应用这个强大的...

    hibernate的多种映射关系

    Hibernate 是一个流行的对象关系映射(ORM)框架,它允许开发者使用 Java 对象来操作数据库,消除了直接编写 SQL 的需要。在 Hibernate 中,映射关系是将数据库表与 Java 类之间的关联方式,使得对象模型可以与关系...

    Hibernate+中文文档

    6. 集合类(Collections)映射 6.1. 持久化集合类(Persistent collections) 6.2. 集合映射( Collection mappings ) 6.2.1. 集合外键(Collection foreign keys) 6.2.2. 集合元素(Collection elements) 6.2.3. ...

    Hibernate常用jar包集合

    2. **commons-collections-3.1.jar**: Apache Commons Collections是Apache软件基金会提供的一个Java工具包,包含对集合操作的增强,如迭代器、堆栈、队列、映射等。在Hibernate中,它被用来提供一些高级的数据结构...

    Hibernate5需要的jar包。

    12. **commons-collections4-4.x.jar**(可选):提供了一些实用的集合类,某些版本的Hibernate可能依赖此库。 13. **jandex-2.x.x.Final.jar**(可选):用于元数据索引,提高Hibernate的性能。 在实际开发中,...

    hibernate3.2中文文档(chm格式)

    6. 集合类(Collections)映射 6.1. 持久化集合类(Persistent collections) 6.2. 集合映射( Collection mappings ) 6.2.1. 集合外键(Collection foreign keys) 6.2.2. 集合元素(Collection elements) 6.2.3. ...

    HibernateAPI中文版.chm

    6. 集合类(Collections)映射 6.1. 持久化集合类(Persistent collections) 6.2. 集合映射( Collection mappings ) 6.2.1. 集合外键(Collection foreign keys) 6.2.2. 集合元素(Collection elements) 6.2.3. ...

    Hibernate中文详细学习文档

    6. 集合类(Collections)映射 6.1. 持久化集合类(Persistent collections) 6.2. 集合映射( Collection mappings ) 6.2.1. 集合外键(Collection foreign keys) 6.2.2. 集合元素(Collection elements) 6.2.3. ...

    hibernate资源包详解

    5. **commons-collections.jar**:Apache Commons Collections提供了许多Java集合类的扩展和增强,帮助Hibernate执行高级数据处理和转换。 6. **commons-beanutils.jar**:Apache Commons BeanUtils提供了一系列...

    hibernate_reference中文文档.pdf

    - **1.2.1 映射 Person 类**:通过映射一个具体的 `Person` 类来展示一对一、一对多等关联类型的实现。 - **1.2.2 单向 Set-based 的关联**:解释单向关联的使用场景及其在 Hibernate 中的具体实现。 - **1.2.3 使...

    Hibernate包作用详解

    5. **commons-collections.jar**:Apache Commons Collections库,提供了Java集合框架的增强,包括各种实用的集合类和算法。Hibernate利用这些集合类优化数据处理和查询。 6. **commons-beanutils.jar**:Apache ...

    Hibernate 中文 html 帮助文档

    6. 集合类(Collections)映射 6.1. 持久化集合类(Persistent collections) 6.2. 集合映射( Collection mappings ) 6.2.1. 集合外键(Collection foreign keys) 6.2.2. 集合元素(Collection elements) 6.2.3. 索引...

    hibernate3.x JAR包集合_马士兵版

    "hibernate3.x JAR包集合_马士兵版" 指的是一个包含Hibernate 3.x版本所有必要的JAR文件的集合,由知名IT教育家马士兵提供。这个集合是为了便于学习和使用Hibernate 3.x框架而准备的,适用于初学者和开发者,确保...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    6. 集合类(Collections)映射 6.1. 持久化集合类(Persistent collections) 6.2. 集合映射( Collection mappings ) 6.2.1. 集合外键(Collection foreign keys) 6.2.2. 集合元素(Collection elements) 6.2.3. ...

    hibernate3.0

    `commons-collections-3.1.jar`是Apache Commons Collections库,提供了大量的集合操作工具和算法,如列表、映射、队列等的扩展。在Hibernate中,它被用来增强集合的操作性能和便利性,例如在查询结果集转换为Java...

    hibernate 体系结构与配置 参考文档(html)

    6. 集合类(Collections)映射 6.1. 持久化集合类(Persistent collections) 6.2. 集合映射( Collection mappings ) 6.2.1. 集合外键(Collection foreign keys) 6.2.2. 集合元素(Collection elements) 6.2.3. ...

    最全Hibernate 参考文档

    6. 集合类(Collections)映射 6.1. 持久化集合类(Persistent collections) 6.2. 集合映射( Collection mappings ) 6.2.1. 集合外键(Collection foreign keys) 6.2.2. 集合元素(Collection elements) 6.2.3. 索引...

    Hibernate教程

    7. 集合类(Collections)映射 7.1. 持久化集合类(Persistent collections) 7.2. 集合映射( Collection mappings ) 7.2.1. 集合外键(Collection foreign keys) 7.2.2. 集合元素(Collection elements) 7.2.3. ...

    Hibernate框架参考文档

    6. 集合类(Collections)映射; 7. 关联关系映射; 8. 组件(Component)映射; 9. 继承映射(Inheritance Mappings); 10. 与对象共事; 11. 事务和并发; 12. 拦截器与事件(Interceptors and events); 13. 批量处理(Batch...

    Hibernate 参考文档

    #### 六、集合类(Collections)映射 - **持久化集合类(Persistent Collections)** - **映射集合**:集合类型的映射策略。 - **值集合和多对多关联**:多对多关系的映射。 - **一对多关联**:一对多关系的映射方法...

Global site tag (gtag.js) - Google Analytics