Hibernate 多对多的联级关系的其他操作

版权声明:博客知识产权来源命运的信徒,切勿侵权 https://blog.csdn.net/qq_37591637/article/details/84822528

 映射文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
	<class name="cn.com.dao.Sys_Role" table="sys_role" catalog="lf">
		<id name="role_id" column="role_id" type="int" length="255">
			<generator class="assigned"></generator>
		</id>
		<property name="role_memo" column="role_memo" type="string"
			length="255"></property>
		<property name="role_name" column="role_name" type="string"
			length="255"></property>
		<!-- set集合 name="关联的另一方的集合属性" table="中间表的表名称" -->
		<set name="users" table="sys_user_role" cascade="save-update">
			<!-- key column="当前对象在中间表中的外键名称" -->
			<key column="role_id"></key>
			<!-- class="关联的另一方类的名称" column="关联的另一方类在中间表中的外键名称" -->
			<many-to-many class="cn.com.dao.Sys_User" column="user_id"></many-to-many>
		</set>
	</class>

</hibernate-mapping>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class name="cn.com.dao.Sys_User" table="sys_user" catalog="lf">
<id name="user_id" column="user_id" type="int" length="255">
<generator class="assigned"></generator>
</id>
<property name="user_code" column="user_code" type="string" length="255"></property>
<property name="user_name" column="user_name" type="string" length="255"></property>
<property name="user_password" column="user_password" type="string" length="255"></property>
<property name="user_state" column="user_state" type="string" length="255"></property>
<!-- set集合 name="关联另一方的集合属性名称" table="中间表的表名称" -->
<set name="roles" table="sys_user_role"  inverse="true" cascade="save-update">
<!-- key column="当前对象在中间表中的外键的名称" -->
<key column="user_id" ></key>
<!-- many-to-many class="关联另一方的类全名称 column="在中间表中另一方外键的名称"" -->
<many-to-many class="cn.com.dao.Sys_Role" column="role_id"></many-to-many>
</set>
</class>
</hibernate-mapping>

 demo如下:

//1.删除某个用户的角色

package cn.com.test;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import cn.com.dao.Sys_Role;
import cn.com.dao.Sys_User;
import cn.com.util.Hibernate_Utils;
public class Demo11 {
/*author:命运的信徒
 * date:2018/12/05
 * arm:hibernate多对多的其他操作
 */
	@Test
	public void demo(){
		Session session=Hibernate_Utils.openSession();
		Transaction tx=session.beginTransaction();
		//1.删除某个用户的角色
		Sys_User sy=session.get(Sys_User.class, 11);
		Sys_Role sr=session.get(Sys_Role.class, 00);
		/*sy.getRoles().remove(sr);*///执行无效,因为放弃了对外键的维护
		sr.getUsers().remove(sy);
		tx.commit();
	}
}

demo:

    //2.将某个用户的角色改造

package cn.com.test;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import cn.com.dao.Sys_Role;
import cn.com.dao.Sys_User;
import cn.com.util.Hibernate_Utils;
public class Demo11 {
/*author:命运的信徒
 * date:2018/12/05
 * arm:hibernate多对多的其他操作
 */
	@Test
	public void demo(){
		Session session=Hibernate_Utils.openSession();
		Transaction tx=session.beginTransaction();
		//1.删除某个用户的角色
		/*Sys_User sy=session.get(Sys_User.class, 11);
		Sys_Role sr=session.get(Sys_Role.class, 00);
		sy.getRoles().remove(sr);//执行无效,因为放弃了对外键的维护
		sr.getUsers().remove(sy);//删除中间表中的一条数据
		tx.commit();*/
		//2.将某个用户的角色改造
		Sys_User sy=session.get(Sys_User.class, 13);
		Sys_Role sr=session.get(Sys_Role.class, 01);
		Sys_Role sr1=session.get(Sys_Role.class, 02);
		sr.getUsers().remove(sy);
		sr1.getUsers().add(sy);
		tx.commit();
	}
}

猜你喜欢

转载自blog.csdn.net/qq_37591637/article/details/84822528