`

十五 cascade 级联操作与inverse表是否放弃维护关联关系

 
阅读更多
cascade 级联操作字段 
Casade用来说明当对主对象进行某种操作时是否对其关联的从对象也作类似的操作,常用的cascade:
none,all,save-update ,delete, lock,refresh,evict,replicate,persist,
merge,delete-orphan(one-to-many) 。一般对many-to-one,many-to-many不设置级联,
在<one-to-one>和<one-to-many>中设置级联

应用的例子
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping 
	package="vo.util.bean">

	<class name="Department">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
		<!-- 配置一对多的映射关系  -->
		<set name="ems" cascade="save-update,delete">
		<!-- 关联关系的外键  -->
		<key column="depaer_id"/>
		   <!-- 关联关系的实体类配置 -->
		  <one-to-many  class="Employee" />
		</set>
	</class>
	
</hibernate-mapping>

应用场景:根据业务需求,比如说老师和学生是多对多的关系,如果把一个老师给开除了,是不是要把
学生给开除了呢?还有一个公司,如果公司撤销了一个部门,是不是要把这个部门的员工全都开除了呢 


inverse表“是否放弃维护关联关系”(在Java里两个对象产生关联时,对数据库表的影响),
在one-to-many和many-to-many的集合定义中使用,inverse=”true”表示该对象不维护关联关系;
该属性的值一般在使用有序集合时设置成false(注意hibernate的缺省值是false)。
one-to-many维护关联关系就是更新外键。many-to-many维护关联关系就是在中间表增减记录。
注: 配置成one-to-one的对象不维护关联关系

inverse="true" 设置在one的一方,表示放弃级联操作 

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping 
	package="vo.util.bean">

	<class name="Department">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
		<!-- 配置一对多的映射关系  -->
		<set name="ems" cascade="save-update,delete" inverse="true">
		<!-- 关联关系的外键  -->
		<key column="depaer_id"/>
		   <!-- 关联关系的实体类配置 -->
		  <one-to-many  class="Employee" />
		</set>
	</class>
	
</hibernate-mapping>

这时cascade设置就失去意义了,因为inverse设置为true,就表示主表实体放弃了级联维护
inverse不能再有序的集合中使用,因为在有序的集合里,hibernate对关联关系的实体的维护都已经失效了
那还维护什么顺序呢 
例如
<list name="ems" inverse="true">
<key column="depaer_id"/>
<!-- 这一列指定其记录顺序 这一列由hibernate来使用  -->
<list-index column="ol"/>
<one-to-many class="Employee"/>
</list>
这里已经设置为inverse="true" 那么就放弃了级联关系的维护 
其实对级联关系的维护,其实就是更新其外键,现在它对它对应的一方已经不在维护其关系
那还维护这个顺序吗?当然不会了。所以,在有序的集合的关联关系实体中,不可以使用inverse="true"


end 完毕!

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics