Hibernate inverse cascade ...

inverse:默认false,即该端负责维护关系。只能用在一对多和多对多双向关联映射上。

若某端配成inverse=true,则关系会在彼端被维护,对本端实体类的操作不会触发关系的更新。

举个例子,user和role,通过many-to-many来配置两者的多对多关系;user实体类中设置inverse为true,role端设置inverse为false(即:用户与角色间的关系由role来维护);这样,当删除某个被分配了角色的用户的时候,用户被删除,但该用户在USER_ROLE表中所对应用户角色关系信息不会被删除(因为用户端不负责维护关系);
这样,在你再次在权限管理模块中查看某角色下的“用户列表”时,就有可能报“No row with the given identifier exists”异常。

那咋样可以即让关系在Role端维护,又在删除某个已被赋予角色的用户后,在查看角色下“用户列表”时不至于报“No row with the given identifier exists”异常那?答案是在inverse为false(负责维护关系)的Role端的many-to-many标签上使用not-found:
<set name="users" table="T_USER_ROLE_REAL_AB" lazy="false"
			inverse="false" cascade="all">
			<key>
				<column name="ROLE_ID" not-null="true" />
			</key>
			<many-to-many class="com.ambow.hy.object.UserInfo" column="USER_ID"
				outer-join="auto" not-found="ignore"/>
		</set>

关于not-found:
取值有二:ignore、exception。
指定Action to do when an element is not found on a association whiel beeing expected。hibernate官方解释:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-306
引用

not-found="exception" is the current default behavior.

not-found="ignore" will mean that if we cannot find the object represented by the given id we will ignore it and return null.

this implies that the association cannot be lazy.
The option should work for one-to-many, many-to-one and many-to-many


你可能感兴趣的:(xml,Hibernate,配置管理,OpenSource)