版权声明:博客知识产权来源命运的信徒,切勿侵权 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();
}
}