Hibernate关联映射(单项多对一和一对多、双向一对多)
最近总是接触着新的知识点来扩展自己的知识面;不停的让自己在原地接触天空的感觉真的很美好!!!革命没有成功,程序员的我们怎么能不努力呢......
一、用员工和部门来剖析关联映射的原理。
1)从这张截图可以看出我会站在员工的角度讲述:(单向关联)
关系:(多个员工对应一个部门)多对一的关系
意味:多个Emp对象只会引用一个Dept对象
方法:在Emp类中定义一个Dept类型属性,来引用所有关联的Dept对象
eg.
第一步建立两个实体类省略
第二步建立大配置
/p>
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
oracle.jdbc.OracleDriver
jdbc:oracle:thin:@localhost:1521:orcl
sa
1
org.hibernate.dialect.Oracle10gDialect
true
true
update
true
org.hibernate.cache.EhCacheProvider
true
第三步创建小配置Emp
关键代码
解析::元素建立了Dept属性和Emp表的DEPTNo之间的映射关联
name:设定持久化类的属性名
column:name对应表的外键(Emp表的外键)
class:设定持久化类的属性类型
/p>
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
SEQ_NUM
第四步创建小配置Dept
/p>
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
SEQ_NUM
第五步就是测试类
@Testpublic voidAddObjectToDept(){
Emp emps=newEmp();
emps.setEmpName("西丽");
Session session=HibernateUtil.currentSession();
Transaction tx=session.beginTransaction();
session.save(emps);
System.out.println("ok");
tx.commit();
HibernateUtil.closeSession();
}
第六步运行结果
上述结果:现将数据查找一遍确保没有在进行添加
2)从截图可以看出我接下来就要站在部门Dept的角度剖析:(单项关联)
关系:(部门)一对多关联
意味:每一个Dept对象会引用一组Emp对象
方法:Dept类中应该定义一个集合类型属性,来引用所有关联的Emp对象。
与上述步骤唯一不同的就是Dept.hbm.xml的小配置
关键代码一对多
/p>
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
SEQ_NUM
二、双向关联
如上图所示:满足多对一和一对多的关联就是双向关联。
三、cascade属性
问题:删除Dept对象,并级联删除与Dept对象关联的Emp对象
解析:我们可以在、元素里面写cascade=“delete”属性就能完成并级联删除
cascade属性值
描述
none
当Session操纵当前对象,忽略其它的关联对象 cascade的默认值none
save-update
保存或者更新数据
delete
当通过Session的delete()方法删除当前对象时会级联删除所有的关联的对象
all
包含save—update和delete
初学者的我理解所致,既有不足,请多多指教。