Hibernate--inverse反转

inverse:

inverse:  指定由哪一方来维护之间的关联关系  false默认,表示不放弃,是主动放  true:表示把关联关系的维护反转(放弃),对集合对象的修改不会被反映到数据库中

容易出现的问题:  如果两端都设置控制反转,就会重复更新,报告联合主键重复的错误

inverse和cascade的区别:

inverse决定是否把对对象中集合的改动反映到数据库中,所以inverse只对集合起作用  即只对one-to-many和many-to-one有效  hibernate提供的集合元素包括:<set><map><list><array><properties>cascade决定是否把对对象的改动反映到数据库中,所以cascade对所有的关联关系都起作用

修改配置文件:

 <set name="orders" cascade="save-update, delete" inverse="true">
    <key column="customer_id"></key>
    <one-to-many class="com.roxy.hibernate.pojo.Order"/>
  </set>

inverse必须配置在一端

cascade配置在那一端,就保存哪一端

SQL语句与分析:

Hibernate:
    insert
    into
        t_customer
        (c_name, c_gender, c_age, c_level)
    values
        (?, ?, ?, ?)

----- 向customer中插入数据
Hibernate:
    insert
    into
        t_order
        (orderno, product_name, customer_id)
    values
        (?, ?, ?)
----- 向order中插入数据
Hibernate:
    insert
    into
        t_order
        (orderno, product_name, customer_id)
    values
        (?, ?, ?)
----- 向order中插入数据

查看数据库表:

和前一篇博文的结果进行对比:

  SQL语句并没有在插入数据之后进行更新操作   在向数据库插入数据时,并没有维护customer和order表之间的关联,即order中的外键值为null  在维护两表之间的关系时,可以避免做额外的更新操作
时间: 2024-08-15 03:25:25

Hibernate--inverse反转的相关文章

hibernate的反转引擎生成两个实体类的问题

在使用myeclipse中自带的hibernate 进行jsp开发时候遇到了这个问题.使用hibernate的反转引擎从数据库生成生成实体类,一个表生成了两个类,xx.java和xxId.java .显示的问题如下 其问题的根本在于没有设置对应表的主键.

Hibernate inverse属性和cascade属性

Inverse属性 Inverse属性,是在维护关联关系的时候起作用的. 表示控制权是否转移.(在一的一方起作用) Inverse , 控制反转. Inverse = false  不反转:   当前方有控制权 True  控制反转: 当前方没有控制权 维护关联关系中,是否设置inverse属性: 1.保存数据                    有影响. 如果设置控制反转,即inverse=true, 然后通过部门方维护关联关系.在保存部门的时候,同时保存员工,数据会保存,但关联关系不会维护

Hibernate inverse 和 cascade 的阐释

前提: inverse:负责外键维护; cascade:负责记录的添加删除修改;基础: Hibernate中的"inverse"属性只有两个值"true"和"false"."true"表示将关系维护的权力交给对方,"false"表示不交出维护权力(默认值). Hibernate中的"cascade"-书面化的解释为"该属性会使我们在操作主对象时,同时Hibernate帮助我们完

hibernate inverse属性的作用

hibernate配置文件中有这么一个属性inverse,它是用来指定关联的控制方的. inverse属性默认是false,若为false,则关联由自己控制,若为true,则关联 由对方控制. 见例子: 一个Parent有多个Child,一个Child只能有一个Parent. package com.xian; public class Child { private Long id; private String name; private Parent parent; public Long

hibernate inverse=true

*** 1,部门与员工是一对多, 部门或员工任何一方去维护他们的映射关系都可以,在关系表中都可以互相找到,可是在对象关系中,双方都要去维护, 如emp.setDepart(depart);depart.setEmps(emps); 这样hibernate会产生重复的更新语句,效率低,为了让对象之间的关系都维护好,而sql语句有没有多余, 通常让一的那一方不去维护之间的关联关系,就是用inverse=true; 解释为是否放弃维护关系--是,我的理解是:是否让对方去维护--是,因为inverse是

hibernate inverse作用

Inverse是hibernate双向关系中的基本概念.inverse的真正作用就是指 定由哪一方来维护之间的关联关系.当一方中指定了"inverse=false"(默认),那么那一方就有责任负责之间的关联关系,说白了就是 hibernate如何生成Sql来维护关联的记录! 如果把Inverse设置为false,会多打印一条SQL语句 如果把Inverse配置改为true则结果之打印2条语句 一对多中,如果要一方维护关 系,就会使在插入或是删除"一"方时去updat

Hibernate inverse用法(转载)

出处:http://blog.csdn.net/xiaoxian8023/article/details/15380529 一.Inverse是hibernate双向关系中的基本概念.inverse的真正作用就是指定由哪一方来维护之间的关联关系.当一方中指定了“inverse=false”(默认),那么那一方就有责任负责之间的关联关系,说白了就是hibernate如何生成Sql来维护关联的记录! Hibernate仅仅按照主控方对象的状态的变化来同步更新数据库.按照原来的映射文件,people.

hibernate:inverse、cascade,一对多、多对多详解

1.到底在哪用cascade="..."? cascade属性并不是多对多关系一定要用的,有了它只是让我们在插入或删除对像时更方便一些,只要在cascade的源头上插入或是删除,所有cascade的关系就会被自动的插入或是删除.为了能正确的cascade,unsaved-value是个很重要的属性.Hibernate通过这个属性来判断一个对象应该save还是update,如果这个对象的id是unsaved-value的话,那说明这个对象不是persistence object,要sav

Hibernate inverse属性与cascade属性

理解: inverse属性为false的那一端,拥有管理关系维护的权利 cascade属性指级联,说的通俗点,在cascade那端指定的操作,会影响到所关联的对象 举个例子: 班级和学生的关系是一对多 班级class类包含id,名称和学生的Set集合 学生student类包含id,姓名和班级的id(外键) cascade属性:学生是依赖班级存在的,班级不存在,那么学生也不存在.也就是说,删除班级的同时,学生也就得删除,而不能反过来.一的那端删除时,多的那方已经没有意义了:而多的那端删除时,并不能

hibernate -inverse

one to many inverse=false只能设置维护关联关系的多的一方, inverse属性: 默认为false,表示本方维护关联关系. 如果为true,表示本方不维护关联关系(并不意味着对方维护). 只是影响是否能设置外键列的值(设成有效值或是null值),对获取信息没有影响. A, 解除关联关系 从员工方解除  可以直接解除 // 从部门方解除(与inverse有关系,为false时可以解除) B. 删除 删除员工方(多方),对对方没有影响 // 删除部门方(一方) // a, 如