基本上所有集合关联映射都是在一对多,多对多操作的时候使用。
1、set
我们之前在做一对多操作的时候,多的一方就是一个set.
一对多的例子:http://blog.csdn.net/p_3er/article/details/9036921
实体类中:
private Set<Employee> employees;
对应的映射文件:
<set name="employees" inverse="false" cascade="all">
<key column="department_id"></key>
<one-to-many class="cn.framelife.hibernate.entity.Employee"/>
</set>
2、有序的List
数据库的employee表中多了一个e_index字段,用以表示顺序。
实体类中:
private List<Employee> employees;
对应的映射文件:
<list name="employees" cascade="save-update">
<key column="department_id"></key>
<index column="e_index"></index>
<one-to-many class="cn.framelife.hibernate.entity.Employee"/>
</list>
增加操作与set一样
List集合是有顺序的,"index"标签,是用于记录顺序,List的顺序将表现在"e_index"列上,其余设置,与Set集合类似。注意:List映射中"inverse"中的值不能设置为"true",不然,"e_index
"的列值将不会被赋值。
3、无序的List
数据库的employee表中无e_index字段。无序的List和Set使用起来是一样的。只是无序的List使用的映射标签是<bag>
实体类中:
privateList<Employee> employees;
对应的映射文件:
<bag name="employees" cascade="all">
<key column="department_id"></key>
<one-to-many class="cn.framelife.hibernate.entity.Employee"/>
</bag>
增加操作与set一样
4、Map
表设计与set的时候一样。
实体类中:
privateMap<String, Employee> employees;
这里的键值对中的键应该是唯一的(不重复),我们设置为员工的名字。
对应的映射文件:
<map name="employees" cascade="all">
<key column="department_id"></key>
<map-key type="string" column="name"></map-key>
<one-to-many class="cn.framelife.hibernate.entity.Employee"/>
</map>
增加操作:
transaction = session.beginTransaction();
Department department = new Department();
department.setName("m");
Map<String, Employee> employees = new HashMap<String, Employee>();
for(int i = 0;i < 10; i++){
Employee employee = new Employee();
employee.setName("m"+i);
employees.put(employee.getName(), employee);
}
department.setEmployees(employees);
session.save(department);
transaction.commit();
5、注意
5.1HashMap<String,Employee>
employees = newHashMap<String,Employee>();
这样子的写法在Java中语法上和使用上是没有任何问题的。
因为懒加载的需要,我们使用所有集合对象都应该用接口来定义。而且在我们写程序的过程中也尽可能得使用接口。
5.2cascade缺省为不级联。
cascade的值有:none,all,save-update,delete...
many-to-one many-to-many一般不设置级联
one-to-one one-to-many可设置级联
5.3inverse是否要放弃维护关联关系
true为放弃,false为不放弃(缺省)
一般不设置放弃
分享到:
相关推荐
最后,第九章“集合论悖论”探讨了集合论中的一些自相矛盾的结果,如著名的罗素悖论和巴拿赫-塔斯基悖论,这些悖论挑战了数学的完备性和一致性。 通过学习这九个章节,读者将能够系统地理解和掌握集合论的基本原理...
6. **映射在集合间的应用**:题目中涉及了不同集合之间的映射关系,如A=[0,4]到B=[0,2]的映射,需要判断是否所有的A中的元素都能在B中找到对应的元素,以判断是否构成映射。 7. **映射在方程解中的应用**:通过映射...
第11章 Hibernate的关联映射 第12章 HQL查询语言 第13章 Hibernate的高级特性 第14章 Hibernate结合JSP使用 第四篇 iBatis篇 第15章 iBatis概述 第16章 iBatis的特性 第17章 JSP、Servlet和iBatis结合...
9. **缓存机制**:理解Hibernate的第一级缓存(Session缓存)和第二级缓存(可选,如EHCache),它们如何影响一对多关联的读写操作。 10. **性能考虑**:在设计一对多双向组合关联时,要考虑到查询效率、内存消耗等...
这些概念在理解集合如何相互关联以及如何将集合中的元素映射到其他集合中的元素方面起着核心作用。 此外,集合论还研究了基数的概念,即集合中元素的“数量”。对于有限集合,基数对应于集合的大小。对于无限集合,...
这通常包括配置实体类、定义关联映射、使用中间表以及进行增删改查操作。在实际开发中,理解和掌握这种关联类型对于处理复杂的数据交互至关重要。 **标签解析:** - **源码**:暗示内容可能包含具体的代码示例,...
第9章 通过Hibernate操纵对象(下) 9.1 与触发器协同工作 9.2 利用拦截器(Interceptor)生成审计日志 9.3 Hibernate的事件处理机制 9.4 批量处理数据 9.4.1 通过Session来进行批量操作 9.4.2 通过...
第9章 通过Hibernate操纵对象(下) 9.1 与触发器协同工作 9.2 利用拦截器(Interceptor)生成审计日志 9.3 Hibernate的事件处理机制 9.4 批量处理数据 9.4.1 通过Session来进行批量操作 9.4.2 通过...
第9章 通过Hibernate操纵对象(下) 9.1 与触发器协同工作 9.2 利用拦截器(Interceptor)生成审计日志 9.3 Hibernate的事件处理机制 9.4 批量处理数据 9.4.1 通过Session来进行批量操作 9.4.2 通过...
第9章 通过Hibernate操纵对象(下) 9.1 与触发器协同工作 9.2 利用拦截器(Interceptor)生成审计日志 9.3 Hibernate的事件处理机制 9.4 批量处理数据 9.4.1 通过Session来进行批量操作 9.4.2 通过...
第9章 使用对象 9.1 持久化生命周期 9.1.1 对象状态 9.1.2 持久化上下文 9.2 对象同一性和等同性 9.2.1 引入对话 9.2.2 对象同一性的范围 9.2.3 脱管对象的同一性 9.2.4 扩展持久...
- **组关联映射(Set Associative Mapping)**:每个集合内的多个缓存行可以存储来自不同主内存块的数据,例如2路或4路组关联。 - **全关联映射(Fully Associative Mapping)**:主内存的任何块都可以映射到缓存...
##### 1.2 第二部分 — 关联映射 此章节深入探讨了 Hibernate 中对象之间的关联映射。 - **1.2.1 映射 Person 类**:通过映射一个具体的 `Person` 类来展示一对一、一对多等关联类型的实现。 - **1.2.2 单向 Set-...
第12章 基于annotation注解技术的ssh 2整合开发 12.1 初识annotation522 12.2 亲身体验annotation的威力524 12.3 struts 2.x的annotation插件convention-plugin528 12.4 hibernate 3.x的annotation解决之道532 ...
7. **集合映射:** 对于一对多关系,通常使用集合(如 List, Set)来存储关联的对象。Hibernate提供了集合映射的配置,如 @OneToMany 的 mappedBy 属性用于指定关联的反向引用字段。 8. **双向关联的维护:** 在...
5. **第7章 高级实体关联映射**:深入讲解了关联映射的高级特性,如双向关联、懒加载、级联操作、集合的有序性和唯一性约束,以及如何处理多对多关联。 6. **第9章 使用对象**:讲述了如何通过Session进行对象的...
3. **实体类和映射文件**:每个Java实体类通常有一个对应的.hbm.xml映射文件,它定义了类与数据库表之间的映射关系,包括字段对应、主键生成策略等。 4. **对象关系映射(ORM)**:在chapter02中,我们将学习如何...