hibernate的inverse属性值的设置

  1. 多对多关系注意事项
    1.1 一定要定义一个主控方
    1.2 多对多删除
    1.2.1 主控方直接删除
    1.2.2 被控方先通过主控方解除多对多关系,再删除被控方
    1.2.3 禁用级联删除
    1.3 关联关系编辑,不需要直接操作桥接表,hibernate的主控方会自动维护

案例:级联新增 级联删除 (inverse属性值的设置)

 * 填写书本解析,勾选类型复选框,提交
 * 如在hibernate 里需调用bookDao.add
 * 四种做法:
 * 	inverse属性 一般使用 两种:true false  false true
 * 如:
 * book.hbm.xml :false
 * category.hbm.xml true
 * 代表的是:将维护关系(中间表)的责任给book
 *  book.hbm.xml : true
 * category.hbm.xml : true
 * 出现的情况:中间表无对象维护
 * 	book.hbm.xml : false
 * category.hbm.xml : false
 * 出现的情况:中间表出现两条数据(hibernate的版本不同会有差异)
 * 注意一点:
 * hibernate是通过持久化对象来操作数据库
 *
 * 主控方删除
 * 结论是一并删除从表关联的中间表信息删除




 * 被控方处理中间表删除
 * 结论是失败
 * 原因:因为被控方被中间表所引用
 * 解决方案
 * 1.解除关联关系(先删除中间表引用数据),再去删除主表信息
 * dao方法代码演示:
	@Override
	public void deleteCategory(Category category) {
		Session session = HibernateUtli.getCurrentSession();
		Transaction transaction = session.beginTransaction();
		try {
			Category t = session.get(Category.class, category.getCategory_id());
			//t保存着与某一些书籍相关联的关系
			for (Book b : t.getBooks()) {
				//注意:关系交于主控方维护(book)
				b.getCategorys().remove(t);
			}
			session.delete(t);
			transaction.commit();
		} catch (Exception e) {
			e.printStackTrace();
			transaction.rollback();
			throw new RuntimeException("删除出现异常");
		}
		HibernateUtli.closeSession();
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值