第九章 关系映射 集合关联映射
2013-06-08 10:18
399 查看
基本上所有集合关联映射都是在一对多,多对多操作的时候使用。
一对多的例子:http://blog.csdn.net/p_3er/article/details/9036921
实体类中:
private Set<Employee> employees;
对应的映射文件:
实体类中:
对应的映射文件:
增加操作与set一样
List集合是有顺序的,"index"标签,是用于记录顺序,List的顺序将表现在"e_index"列上,其余设置,与Set集合类似。注意:List映射中"inverse"中的值不能设置为"true",不然,"e_index
"的列值将不会被赋值。
实体类中:
对应的映射文件:
增加操作与set一样
实体类中:
这里的键值对中的键应该是唯一的(不重复),我们设置为员工的名字。
对应的映射文件:
增加操作:
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为不放弃(缺省)
一般不设置放弃
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为不放弃(缺省)
一般不设置放弃
相关文章推荐
- 第九章 关系映射 多对多关联映射
- 第九章 关系映射 多对一关联映射
- 第九章 关系映射 继承关联映射
- 第九章 关系映射 一对多关联映射
- Hibernate 、多表关联映射 - 一对一关系映射(one- to-one)
- Hibernate 多表关联映射- Hibernate中使用的集合类型(set,list,array,bag,map)
- hibernate关系映射——关联映射
- hibernate映射一对多,双向关系[关联自身],初学例子四
- 依赖关联集合组合关系区别
- Hibernate对象关系映射----复合主键、Component、集合映射
- Hibernate 映射关系 ---One2Many 双向关联
- Hibernate关系映射(2)_一对一双向外键关联
- hibernate-关系映射(多对一单向关联)-8
- Hibernate 关系映射、多向关联
- Hibernate(八)Hibernate集合Map关系映射
- Hibernate教程05_关系映射之一对一双向外键关联
- MyBatis之高级关联和集合映射(二、嵌套查询和嵌套结果小案例)
- Hibernate 、多表关联映射-多对一关系(many-to-one)
- Hibernate关系映射级别注解(多对一单向外键关联)
- 关系映射的双向关联的多对多