hibernate框架多对多-级联保存(十八)

一、多对多级联保存

多对多级联保存,只要在上一篇的基础上对User.hbm.xml配置稍作修改

1.1 配置


多对多级联的时候,一方配置inverser,另一方就配置cascade

1.2 测试程序

	@Test
	public void run2() {
		Session session = HibernateUtils.getCurrentSession();
		Transaction tx = session.beginTransaction();

		// 模拟多对多,双向的关联
		// 创建用户
		User u1 = new User();
		u1.setUsername("zhangsan");
		User u2 = new User();
		u2.setUsername("lisi");

		// 创建角色
		Role r1 = new Role();
		r1.setRname("manager");
		Role r2 = new Role();
		r2.setRname("actor");

		// 关联
		u1.getRoles().add(r1);
		u1.getRoles().add(r2);
		u2.getRoles().add(r1);

		session.save(u1);
		session.save(u2);

		tx.commit();
	}

1.3 运行结果

截图就不贴了(反正和上一篇都一样),看sql吧

log4j:WARN No appenders could be found for logger (org.jboss.logging).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Hibernate: 
    insert 
    into
        sys_user
        (username, password) 
    values
        (?, ?)
Hibernate: 
    insert 
    into
        sys_role
        (rname) 
    values
        (?)
Hibernate: 
    insert 
    into
        sys_role
        (rname) 
    values
        (?)
Hibernate: 
    insert 
    into
        sys_user
        (username, password) 
    values
        (?, ?)
Hibernate: 
    insert 
    into
        sys_user_role
        (uid, rid) 
    values
        (?, ?)
Hibernate: 
    insert 
    into
        sys_user_role
        (uid, rid) 
    values
        (?, ?)
Hibernate: 
    insert 
    into
        sys_user_role
        (uid, rid) 
    values
        (?, ?)

二、操作中间表-删除

想要操作中间表,我们只需要操作javabean中的集合

2.1 测试程序

	/**
	 * 现在:zhangsan用户,有2个角色,manager和actor 
	 * 让zhangsan没有actor角色
	 */
	@Test
	public void run3() {
		Session session = HibernateUtils.getCurrentSession();
		Transaction tx = session.beginTransaction();

		// 查询zhangsan用户
		User u1 = session.get(User.class, 1L);
		// 查询角色
		Role r2 = session.get(Role.class, 2L);
		u1.getRoles().remove(r2);

		tx.commit();
	}

2.2 运行结果


看sql:

log4j:WARN No appenders could be found for logger (org.jboss.logging).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Hibernate: 
    select
        user0_.uid as uid1_1_0_,
        user0_.username as username2_1_0_,
        user0_.password as password3_1_0_ 
    from
        sys_user user0_ 
    where
        user0_.uid=?
Hibernate: 
    select
        role0_.rid as rid1_0_0_,
        role0_.rname as rname2_0_0_ 
    from
        sys_role role0_ 
    where
        role0_.rid=?
Hibernate: 
    select
        roles0_.uid as uid1_2_0_,
        roles0_.rid as rid2_2_0_,
        role1_.rid as rid1_0_1_,
        role1_.rname as rname2_0_1_ 
    from
        sys_user_role roles0_ 
    inner join
        sys_role role1_ 
            on roles0_.rid=role1_.rid 
    where
        roles0_.uid=?
Hibernate: 
    delete 
    from
        sys_user_role 
    where
        uid=? 
        and rid=?

三、操作中间表-添加

3.1 测试程序

	/**
	 * 现在:zhangsan用户,有1个角色,manager 
	 * 让zhangsan添加actor角色
	 */
	@Test
	public void run4() {
		Session session = HibernateUtils.getCurrentSession();
		Transaction tx = session.beginTransaction();

		// 查询zhangsan用户
		User u1 = session.get(User.class, 1L);
		// 查询角色
		Role r2 = session.get(Role.class, 2L);
		u1.getRoles().add(r2);

		tx.commit();
	}

3.2 运行结果


看sql:

log4j:WARN No appenders could be found for logger (org.jboss.logging).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Hibernate: 
    select
        user0_.uid as uid1_1_0_,
        user0_.username as username2_1_0_,
        user0_.password as password3_1_0_ 
    from
        sys_user user0_ 
    where
        user0_.uid=?
Hibernate: 
    select
        role0_.rid as rid1_0_0_,
        role0_.rname as rname2_0_0_ 
    from
        sys_role role0_ 
    where
        role0_.rid=?
Hibernate: 
    select
        roles0_.uid as uid1_2_0_,
        roles0_.rid as rid2_2_0_,
        role1_.rid as rid1_0_1_,
        role1_.rname as rname2_0_1_ 
    from
        sys_user_role roles0_ 
    inner join
        sys_role role1_ 
            on roles0_.rid=role1_.rid 
    where
        roles0_.uid=?
Hibernate: 
    insert 
    into
        sys_user_role
        (uid, rid) 
    values
        (?, ?)
源码下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值