1. 程式人生 > >Hibernate 多對多的聯級關係的其他操作

Hibernate 多對多的聯級關係的其他操作

 對映檔案如下:

<?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();
	}
}