-------------User.hbm.xml------------
-----------Role.hbm.xml------------
-----------------Right.hbm.xml----------------
-----------------Many2manyTest.java-----------------
====================执行结果如下=====================
Hibernate: select user0_.userId as userId0_0_, user0_.userName as userName0_0_, user0_.roleId as roleId0_0_ from t_user user0_ where user0_.userId=?
Hibernate: select role0_.roleId as roleId1_0_, role0_.roleName as roleName1_0_ from t_role role0_ where role0_.roleId=?
manager
Hibernate: select rights0_.roleId as roleId1_, rights0_.rightId as rightId1_, right1_.rightId as rightId3_0_, right1_.rightName as rightName3_0_ from t_role_right rights0_ left outer join t_right right1_ on rights0_.rightId=right1_.rightId where rights0_.roleId=?
search user
delete user
Hibernate: delete from t_role_right where rightId=?
Hibernate: delete from t_role_right where rightId=?
------------------------------------------
其中很奇怪多执行了如下操作
Hibernate: delete from t_role_right where rightId=?
Hibernate: delete from t_role_right where rightId=?
查询不用事务是没问题,但我执行了事务后怎么就删除数据了。
大家帮我分析一下why。谢谢。
<?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 package="com.accp.demo">
<class name="User" table="t_user">
<id name="userId">
<generator class="native" />
</id>
<property name="userName" />
<many-to-one name="role" class="Role" column="roleId" />
</class>
</hibernate-mapping>
-----------Role.hbm.xml------------
<?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 package="com.accp.demo">
<class name="Role" table="t_role">
<id name="roleId">
<generator class="native" />
</id>
<property name="roleName" />
<set name="users" cascade="save-update" inverse="true">
<key column="roleId"/>
<one-to-many class="User"/>
</set>
<set name="rights" table="t_role_right" cascade="save-update">
<key column="roleId" />
<many-to-many class="Right" column="rightId" />
</set>
</class>
</hibernate-mapping>
-----------------Right.hbm.xml----------------
<?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 package="com.accp.demo">
<class name="Right" table="t_right">
<id name="rightId">
<generator class="native" />
</id>
<property name="rightName" />
<set name="roles" table="t_role_right" cascade="save-update">
<key column="rightId"/>
<many-to-many class="Role" column="roleId"/>
</set>
</class>
</hibernate-mapping>
-----------------Many2manyTest.java-----------------
package com.accp.demo;
import java.util.Iterator;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.junit.Test;
import com.accp.demo.utils.HibernateUtils;
public class Many2manyTest {
@Test
public void searchUserRights() {
Session session = null;
try {
session = HibernateUtils.getSession();
User user = (User)session.get(User.class, 1);
System.out.println(user.getRole().getRoleName());
Iterator itr = user.getRole().getRights().iterator();
while(itr.hasNext()){
Right right = (Right)itr.next();
System.out.println(right.getRightName());
}
session.beginTransaction().commit();
} catch (HibernateException e) {
e.printStackTrace();
session.getTransaction().rollback();
} finally {
HibernateUtils.closeSession(session);
}
}
}
====================执行结果如下=====================
Hibernate: select user0_.userId as userId0_0_, user0_.userName as userName0_0_, user0_.roleId as roleId0_0_ from t_user user0_ where user0_.userId=?
Hibernate: select role0_.roleId as roleId1_0_, role0_.roleName as roleName1_0_ from t_role role0_ where role0_.roleId=?
manager
Hibernate: select rights0_.roleId as roleId1_, rights0_.rightId as rightId1_, right1_.rightId as rightId3_0_, right1_.rightName as rightName3_0_ from t_role_right rights0_ left outer join t_right right1_ on rights0_.rightId=right1_.rightId where rights0_.roleId=?
search user
delete user
Hibernate: delete from t_role_right where rightId=?
Hibernate: delete from t_role_right where rightId=?
------------------------------------------
其中很奇怪多执行了如下操作
Hibernate: delete from t_role_right where rightId=?
Hibernate: delete from t_role_right where rightId=?
查询不用事务是没问题,但我执行了事务后怎么就删除数据了。
大家帮我分析一下why。谢谢。