第九章 关系映射 集合关联映射

基本上所有集合关联映射都是在一对多,多对多操作的时候使用。

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为不放弃(缺省)

一般不设置放弃


时间: 2024-08-22 08:57:07

第九章 关系映射 集合关联映射的相关文章

第九章 关系映射 一对多关联映射

如:department与employee employee中有一个department_id的外键 Department: public class Department implements Serializable { private Integer id; private String name; private Set<Employee> employees; public Set<Employee> getEmployees() { return employees;

第九章 关系映射 一对一关系 唯一外键方式实现一对一

如:person与idCard 基于外键的one-to-one可以描述为多对一.   hibernate 一对一唯一外键关联映射(双向关联 Person<---->IdCard )           一对一唯一外键 双向 关联,需要在另一端(person ),添加 <one-to-one> 标签,指示 hibernate 如何加载 其关联对象,默认根据主键加载idcard ,外键关联映射中,因为两个实体采用的是 idcard 的外键维护的关系, 所以不能指定主键加载 idcard

第九章 关系映射 多对一关联映射

如:department与employee employee中有一个department_id的外键 Department: public class Department implements Serializable { private Integer id; private String name; public Department() { } public Integer getId() { return id; } public void setId(Integer id) { th

第九章 关系映射 组件关联映射

组件是针对同一张表中的字段进行映射,作用是将字段多的一张表分成多个实体类来表示. 如:name与user user表中有first_name及last_name.在实体类中,自定义一个Name类来表示first_name与last_name; Name实体类: package cn.framelife.mvc.entity; public class Name { private String firstName; private String lastName; public String g

第九章 关系映射 多对多关联映射

表设计: 有一张中间表,中间表中有两张关联表的外键 如:student与teacher Student: package cn.framelife.mvc.entity; import java.util.Set; public class Student { private Integer id; private String name; private Set<Teacher> teachers; public Integer getId() { return id; } public v

第九章 关系映射 继承关联映射

1.discriminator鉴别器 同一张表中表示不同的类型 在employee表中定义一个type字段,表示员工的类型 name是所有的员工都有的属性. sale_count是销售员特有的属性. 而skiller是技术人员特有的属性. 三个实体类: Employee: package cn.framelife.mvc.entity; import java.io.Serializable; public class Employee implements Serializable { pri

第九章 关系映射 .hbm.xml简单写法与解释

<?xml version="1.0" encoding="utf-8"?> <!-- 上面是xml文件的版本与编码 --> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd&qu

第九章 关系映射 说明

这里的关系是指:对象之间的关系,并不是指数据库的关系,-----红色重要        存在以下关系: 1.    一对一 2.    一对多 3.    多对一 4.    多对多 5.    集合映射 u  List u  Set u  Map 6.    继承关系(不重要) 7.     组件映射

【SSH系列】Hibernate映射-- 多对一单向关联映射

      在hibernate中非常重要的就是映射,在前面的博文中,小编简单的介绍了基本映射,基本映射是对一个实体进行映射,关联映射就是处理多个实体之间的关系,将关联关系映射到数据库中,所谓的关联关系在对象模型中有一个或多个引用.这个比较简单,但是基础知识还是需要好好掌握的哦,还有一些关联映射,比如user && group,她们之间的关系是一对多,我们知道一个用户只能属于一个组,但是一个组可以包好N多个用户,所以他们之间的关系就是多对一的关系,接着我们来看他们的对象模型以及关系模式.