Hibernate对象关联的维护
来源:互联网 发布:windows bash 下载 编辑:程序博客网 时间:2024/05/16 15:16
级联措施:
<hibernate-mapping package="com.zxf.domain"> <class name="Employee"> <id name="id"> <generator class="identity"></generator> </id> <property name="name" not-null="true"/> <many-to-one name="department" column="dep_id" class="Department" cascade="save-update"></many-to-one> </class></hibernate-mapping>
或者另一端维护:上下中cascade只需一个指定就可以了,多个可以这样cascade="delete,save-update"
<class name="Department"> <id name="id" column="dep_id"> <generator class="identity"></generator> </id> <property name="name" not-null="true"/> <set name="employees" cascade="save-update"> <key column="dep_id"></key> <one-to-many class="Employee"/> </set> </class>
inverse属性决定是否放弃维护关联关系:true表示放弃
<hibernate-mapping package="com.zxf.domain"> <class name="Department"> <id name="id" column="dep_id"> <generator class="identity"></generator> </id> <property name="name" not-null="true"/> <set name="employees" inverse="true"> <key column="dep_id"></key> <one-to-many class="Employee"/> </set> </class></hibernate-mapping>
Junit:
@Testpublic void testSave(){Employee e1 = new Employee();Employee e2 = new Employee();Department dep = new Department();Set<Employee> es = new HashSet<Employee>();e1.setName("Jason");e2.setName("Teeny");dep.setName("HR");es.add(e1);es.add(e2);e1.setDepartment(dep);//e2.setDepartment(dep);dep.setEmployees(es);//Session session = null;session = HibernateUtil.getSession();session.beginTransaction();session.save(dep);session.save(e1);session.save(e2);session.getTransaction().commit();session.close();}
两者的区别:
级联映射:用这个对象关联只要指定一端,比如说Department.hbm.xml指定后,持久化对象的时候只需要指定Department对象里面有哪些Employee就不需要在Employee对象里面指定它是哪个Department了,也就是只要:
//e1.setDepartment(dep);//e2.setDepartment(dep);dep.setEmployees(es);
inverse:可以在对象模型中将关联指定清楚,但是不需要在one-to-many的one端维护这种关联,所以放弃对one端的维护,为了提高性能,可以让one端先save,可以减少update语句:
e1.setDepartment(dep);//e2.setDepartment(dep);dep.setEmployees(es);//
这两个是相互联系的,即使one端inverse="true",如果没有指定cascade,那么想要通过下面的方式将某一部门内所有Employee也持久化到数据库是不可能的:
session.save(dep);//session.save(e1);//session.save(e2);
- Hibernate对象关联的维护
- Hibernate关联关系 --- 集合映射中的级联保存和是否维护表的关联关系
- hibernate的七种对象关联关系
- hibernate对象关联
- Hibernate对象关联映射
- hibernate在没有主外键关系时是如何维护多对一等关联关系的
- 【Hibernate】设置inverse属性,在多对多种维护关联关系的影响?
- 使用hibernate的Criteria来动态改变对象关联方式
- 基于Hibernate的对象关联关系设计时注意事项
- Hibernate查询关联对象是否为空的语句
- Hibernate查询关联对象是否为空的语句
- hibernate关联对象的增删改查------增
- hibernate关联对象的增删改查------查
- Hibernate 删除对象关联集合遇到的问题
- Hibernate关联映射——对象的三种关系
- Hibernate数据查询 利用关联关系操纵对象 Hibernate事务 Hibernate的Cache管理
- Hibernate数据查询 利用关联关系操纵对象 Hibernate事务 Hibernate的Cache管理
- hibernate 双向一对多 关联在多端维护
- myeclipse9 安装svn插件
- Windows下编译WebRTC过程
- jQuery函数学习
- gdb调试信息加载和保存
- 真的很难办、、、
- Hibernate对象关联的维护
- Debian备分工具
- activex里面的没有CString属性类型
- 范例学习SIP
- OpenCV Qt下入门
- H3C路由器的备份与还原
- android---自带样式
- android之Notification实现
- Windows 7 “Tunnel adapter Local Area Connection” 现象(IPv6)