Hibernate inverse的作用是什么

 

肉眼上 数据库查表语句更少了

在一对多中 一的一方为主键 多的一方含有外键  默认是让一的一方维护自己的外键 多的一方不维护(没法直接配置多的一方维护 只能配置一的一方不维护才让多的一方维护)   一的一方知道到底谁引用了自己  但是想要只靠插入语句 就把维护外键的问题解决 是不可能的 因为无法干涉到 多的一方的插入操作  只能依靠update 语句来给外键赋值(维护)

//注意  <many-to-one> 是 没有inverse 这个属性的 我用的3.0 约束  

但同时 多的一方 也知道自己引用了谁 可以很快的找到自己引用外键的对应的id值

所以 使用inverse 让一的一方不维护 多的一方维护 就可以减少sql语句 节省资源

我们一般建议在一对多双向关联关系中,将一方的inverse属性设置为true,即将主外键的关系交由多方来维护。

打个比方:在一个公司中,是老板认识所有的员工容易,还是所有员工认识老板容易?

看下面这个例子

 

public class Customer {
    private Integer id;
    private  String name;
    //多
    private Set<Order> orders=new HashSet<>();
}
public class Order {
    private  Integer id;
    private  String name;
    private Customer customer;
}

注意 inverse 为false 即默认值 

public class Myhibernate {
    @Test
    public  void test1()
    {
        Session session = HibernateUtil.getNewSession();
        Transaction tr = session.getTransaction();
        tr.begin();
        Customer xiaoming = new Customer("小明");
        Order baozi = new Order("包子", xiaoming);
        Order da= new Order("大包子", xiaoming);
        Set<Order> set=xiaoming.getOrders();
        set.add(baozi);
        set.add(da);
        session.save(xiaoming);
        session.save(baozi);
        session.save(da);
        tr.commit();
        session.close();


    }

}

逻辑很简单 就是 把两个订单 一个顾客 然后执行

sql 的情况是 5条 三条为必要插入 两条为update 维护外键

把 inverse 设为true  结果只有三条必要插入 

我只是小白 有些说错的地方 还请指正 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值