hibernate多对多关系

我建了五张表,user,role,menu,以及三张表的中间表——userrole,menurole。

只要建user,role,menu表的实体类,中间表不需要建立实体类,两张表如果有关系,则需要在实体类中加入Set集合,类型是对方的类型。

然后建立hbm.xml

user.hbm.xml:

<class name="com.pojo.user" table="USER">
        <id name="uid" type="java.lang.String">
            <column name="UID" />
            <generator class="guid" />
        </id>
        <property name="uname" type="java.lang.String">
            <column name="UNAME" />
        </property>
        <set name="sr" table="userrole" inverse="true" cascade="save-update" >
            <key>
                <column name="UID" />
            </key>
            <many-to-many class="com.pojo.role" column="rid"/>
        </set>
    </class>

role.hbm.xml:

<class name="com.pojo.role" table="ROLE">
        <id name="rid" type="java.lang.String">
            <column name="RID" />
            <generator class="guid" />
        </id>
        <property name="rname" type="java.lang.String">
            <column name="RNAME" />
        </property>
        <set name="su" table="userrole" >
            <key>
                <column name="RID" />
            </key>
            <many-to-many class="com.pojo.user" column="uid"/>
        </set>
        <set name="sm" table="rolemenu" inverse="true" cascade="save-update">
            <key>
                <column name="RID" />
            </key>
            <many-to-many class="com.pojo.menu" column="mid"/>
        </set>
    </class>

menu.hbm.xml:

<class name="com.pojo.menu" table="MENU">
        <id name="mid" type="java.lang.String">
            <column name="MID" />
            <generator class="guid" />
        </id>
        <property name="mname" type="java.lang.String">
            <column name="MNAME" />
        </property>
        <set name="sr" table="rolemenu" >
            <key>
                <column name="MID" />
            </key>
            <many-to-many class="com.pojo.role" column="rid"/>
        </set>
    </class>

只有主代理才需要写级联关系,而且不能写all,不然会将所有表的数据全部删除。

接下来就是test类add方法:

@Test
	public void add() {
		Configuration configuration=new Configuration().configure();
		SessionFactory sessionFactory=configuration.buildSessionFactory();
		Session session=sessionFactory.openSession();
		Transaction transaction=session.beginTransaction();
		//添加数据
		user u1=new user();
		u1.setUname("ls");
		
		role r1=new role();
		r1.setRname("zd");
		
		menu m1=new menu();
		m1.setMname("m1");
		
		//互设
		u1.getSr().add(r1);
		r1.getSu().add(u1);
		r1.getSm().add(m1);
		m1.getSr().add(r1);
		
		session.save(u1);
		//关系
		transaction.commit();
		session.close();
		sessionFactory.close();
	}

test的删除方法:

	@Test
	public void delete() {
		Configuration configuration=new Configuration().configure();
		SessionFactory sessionFactory=configuration.buildSessionFactory();
		Session session=sessionFactory.openSession();
		Transaction transaction=session.beginTransaction();
		
		//找到user对象
		user u1=session.get(user.class, "8814c94c-b5ba-11e8-b79f-54e1ad4df251");
		
		//得到user中的所有role
		Set<role> sr=u1.getSr();
		
		//foreach循环,在角色也就是role中将user移除
		for (role role : sr) {
			role.getSu().remove(u1);
		}
		transaction.commit();
		session.close();
		sessionFactory.close();
	}

查询的方法和之前的1对多是一样的,可以参考我之前的博客。

修改角色的话,先调用删除的方法将该user的角色删除,然后调用增加的方法,为其增加一个新的角色。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值