Hibernate 多對多的聯級關係的其他操作
阿新 • • 發佈:2018-12-09
對映檔案如下:
<?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();
}
}