从Hibernate的reference中摘抄了几个父子关系映射的实例以及Bag,Set等的实例,贴出来做个记号
一个一个来看一下Hibernate里面提供的几种集合映射的特点以及例子:
- Set节点:A persistent wrapper for a java.util.Set. The underlying collection is a HashSet,直接包装了java的Set类型,Set的特点的话,jdk的文档是这样说的:
一个不包含重复元素的 collection。更正式地说,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素
总结:如果没有使用"sort"属性,则默认使用的是类似于java.util.HashSet的无序的,不允许重复的
/**
* 顾客
* @author Atomic
*/
public class Customer implements Serializable {
public Customer() {
}
Set orders;//顾客所有的订单,这里声明类型一定要是接口,而不能直接声明层HashSet这种具体类型
public Set getOrders() {
return orders;
}
public void setOrders(Set orders) {
this.orders = orders;
}
}
对应的映射代码:
<!--
name:对应的Java属性名
inverse:将控制端交给"多"的一方
sort:指定了的话就可以进行排序,默认值是unsorted,即不排,也可以指定自己的实现了Comparetor的排序器
where:对应的过滤条件将会被附加到sql上
key:描述关系中的外键
column:对应的表中的外键
not-null:是否有非空约束
one-to-many:一对多关系映射到的类
-->
<set name="orders" inverse="true" sort="unsorted" where="customerId='Atomic'">
<key column="customerId" not-null="true" />
<one-to-many class="epet.test.Order"/>
</set>
- Array节点:A persistent wrapper for an array. Lazy initialization is NOT supported. Use of Hibernate arrays is not really recommended
总结:Array节点直接包装了"数组"这个类型,访问效率应该最高,但是不支持延迟加载,项目中没有映射过,不知道效果如何?
- Bag节点:An unordered, unkeyed collection that can contain the same element multiple times,无序的,允许重复元素的类型
<!-- 使用bag的话可以直接映射成List -->
<bag name="orders" inverse="true">
<key column="customerId" not-null="true"/>
<one-to-many class="com.gxaccp.epet.test.Order"/>
</bag>
- IdBag节点:An IdentifierBag implements "bag" semantics more efficiently than a regular Bag by adding a synthetic identifier column to the table,idbag比bag更加高效,因为他使用了标示符来提高效率,而这个标示符是不用用户干预的
<!--
collection-id:做为关联表用来标示每一行
generator:生成器,可以使用uuid
其余的和普通的manyToMany是一样的
-->
<idbag name="roles">
<collection-id type="string" column="id">
<generator class="uuid.hex"/>
</collection-id>
<key column="customerId" not-null="true"/>
<many-to-many class="com.gxaccp.epet.test.Role" column="roleId"/>
</idbag>
- List节点: A persistent wrapper for a java.util.List. Underlying collection is an ArrayList.list直接包装了java里的ArrayList,当然,也就有所有List的特点:线性有序的,也可以出现重复元素
<!--
list-index:指定list中的项的排序索引
base:索引从多少开始
composite-element:直接将订单项配进来而不使用额外的class节点
-->
<list name="lineItems" inverse="true">
<key column="orderId"/>
<list-index column="line_number" base="0"/>
<composite-element class="OrderLineItem">
<property name="quantity"/>
<many-to-one name="product" class="com.gxaccp.epet.test.Product" column="productId"/>
</composite-element>
</list>
- Map节点: A persistent wrapper for a java.util.Map. Underlying collection is a HashMap.map直接包装了java里的HashMap,当然,如果指定了sort也可以切换成其他的类型:无序的,键值对的
分享到:
相关推荐
1.1 父子关系映射:在数据库中,表与表之间可能存在一对多、多对一或者一对一的关系。通过Hibernate的注解或XML配置,我们可以定义实体类之间的关联。Spring则可以协助管理这些关联对象,例如通过@Autowired注解自动...
16. 示例:父子关系:文档中会包含一个关于如何处理父子关系映射的例子,这是对象模型中常见的关系映射挑战。 17. 示例:Weblog应用程序:这部分将通过一个Weblog应用程序的例子来展示如何使用Hibernate进行数据库...
本文将深入探讨 Hibernate 的简单搭建以及其中的一对多映射关系。 ## Hibernate 搭建 1. **环境配置**:首先,你需要在项目中引入Hibernate的依赖库,这通常通过Maven或Gradle来完成。添加相应的依赖项到pom.xml或...
本压缩软件集中了大量的Hibernate资料,目录如下: 1. Hibernate入门;...21. 示例:父子关系(Parent Child Relationships); 22. 示例:Weblog 应用程序; 23. 示例:复杂映射实例; 24. 最佳实践(Best Practices);
- **父子关系映射**:表示实体之间的层次结构。 - **复杂映射**:处理复杂的数据关系。 **3.2 JavaEE事务管理** - **事务产生的动机**:保证数据的一致性和完整性。 - **事务模型**:本地事务与分布式事务的区别。...
21. 示例:父子关系(Parent Child Relationships) 21.1. 关于collections需要注意的一点 21.2. 双向的一对多关系(Bidirectional one-to-many) 21.3. 级联生命周期(Cascading lifecycle) 21.4. 级联与未保存值...
21. 示例:父子关系(Parent Child Relationships) 21.1. 关于collections需要注意的一点 21.2. 双向的一对多关系(Bidirectional one-to-many) 21.3. 级联生命周期(Cascading lifecycle) 21.4. 级联与未保存值...
21. 示例:父子关系(Parent Child Relationships) 21.1. 关于collections需要注意的一点 21.2. 双向的一对多关系(Bidirectional one-to-many) 21.3. 级联生命周期(Cascading lifecycle) 21.4. 级联与未保存值...
21. 示例:父子关系(Parent Child Relationships) 21.1. 关于collections需要注意的一点 21.2. 双向的一对多关系(Bidirectional one-to-many) 21.3. 级联生命周期(Cascading lifecycle) 21.4. 级联与未保存值...
Hibernate支持各种复杂的关联关系,如实体之间的父子关系、引用关系等。这些关系通过注解或XML配置来定义。 10. **懒加载和立即加载** Hibernate提供了懒加载机制,只有当实际需要时才会加载关联的对象,从而避免...
7.2.3 父子关系 164 7.3 映射一对多双向自身关联关系 165 7.4 改进持久化类 171 7.5 小结 175 7.6 思考题 176 第8章 通过Hibernate操纵对象(上) 179 本章站在持久化层的角度,Java对象在生命周期中可处于...
21. 示例:父子关系(Parent Child Relationships) 21.1. 关于collections需要注意的一点 21.2. 双向的一对多关系(Bidirectional one-to-many) 21.3. 级联生命周期(Cascading lifecycle) 21.4. 级联与未保存值...
21. 示例:父子关系(Parent Child Relationships) 21.1. 关于collections 21.2. 双向的一对多关系(Bidirectional one-to-many) 21.3. 级联生命周期(Cascading lifecycle) 21.4. 级联与未保存值(Cascades and ...
21. 示例:父子关系(Parent Child Relationships) 21.1. 关于collections需要注意的一点 21.2. 双向的一对多关系(Bidirectional one-to-many) 21.3. 级联生命周期(Cascading lifecycle) 21.4. 级联与未保存值...
22. 示例:父子关系(Parent Child Relationships) 22.1. 关于collections需要注意的一点 22.2. 双向的一对多关系(Bidirectional one-to-many) 22.3. 级联生命周期(Cascading lifecycle) 22.4. 级联与未保存值...
7. 关联关系映射 7.1. 介绍 7.2. 单向关联(Unidirectional associations) 7.2.1. 多对一(many to one) 7.2.2. 一对一(one to one) 7.2.3. 一对多(one to many) 7.3. 使用连接表的单向关联...
在Java企业级应用开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,被广泛应用于数据库操作。掌握Hibernate技术,不仅能够提高开发效率,还能为项目带来更好的可维护性。这里我们将深入探讨一系列常见的...
示例:父子关系(Parent Child Relationships) 16.1. 关于collections 16.2. 双向的一对多关系(Bidirectional one-to-many) 16.3. 级联生命周期(Cascading lifecycle) 16.4. 级联更新(Using ...
7.2.3 父子关系 164 7.3 映射一对多双向自身关联关系 165 7.4 改进持久化类 171 7.5 小结 175 7.6 思考题 176 第8章 通过Hibernate操纵对象(上) 179 本章站在持久化层的角度,Java对象在生命周期中可处于...