hibernate---级联保存、级联删除

直接上菜:

dept.hbm.xml:关键点标蓝色这部分,inverse表示放弃维护外键关系,cascade就不用说了

<hibernate-mapping package="com.cissst.it.dept.entity">
    <class name="Dept" table="DEPT1">
        <id name="deptno" column="DEPTNO">
            <generator class="native"></generator>
        </id>
        <property name="dname" column="DNAME"></property>
        <set name="emps" inverse="true" cascade="save-update,delete">
            <key column="deptno"></key>
            <one-to-many class="com.cissst.it.emp.entity.Emp" />
        </set>
    </class>
</hibernate-mapping>

emp.hbm.xml

<hibernate-mapping package="com.cissst.it.emp.entity">
    <class name="Emp" table="EMP1">
        <id name="empno" column="EMPNO">
            <generator class="native"></generator>
        </id>
        <property name="ename" column="ENAME"></property>
        <property name="job" column="JOB"></property>
        <many-to-one name="dept" class="com.cissst.it.dept.entity.Dept"/>
    </class>

</hibernate-mapping>

测试类:

    public static void main(String[] args) {
        //级联保存
        Session session = SessionUtil.openSession();
        Transaction tx = session.getTransaction();
        tx.begin();
        Dept dept = new Dept();
        dept.setDname("develop");
        Emp emp1 = new Emp();
        emp1.setEname("PECOOL");
        emp1.setJob("CODE");
        Emp emp2 = new Emp();
        emp2.setEname("PHOEBE");
        emp2.setJob("PHOTO");
        HashSet<Emp> set = new HashSet<Emp>();
        set.add(emp1);
        set.add(emp2);
        dept.setEmps(set);
        session.save(dept);
        tx.commit();
        session.close();
    }

result:

    只需要保存dept对象,dept中的emp对象也会得到保存,一般1方放弃维护外键关系有助于改善性能,发现sql中明显少了update语句。

原文地址:https://www.cnblogs.com/pecool/p/9690996.html

时间: 2024-10-03 23:04:55

hibernate---级联保存、级联删除的相关文章

【JPA 级联保存/级联删除】@OneToMany (双向) 一对多【转】

[http://blog.sina.com.cn/s/blog_625d79410101dbdd.html] 看过前两篇帮助文档 [JPA] @OneToOne 单向 和 [JPA]@OneToOne 双向 想必大家对级联操作已经充满了好奇和期待吧.那么本文将会想大家介绍JPA的级联保存操作.在此之前,我希望你能先看下这篇文档,对级联注释的各个属性有一个大概的了解.传送门:[JPA] 级联标签的解释 @Cascade 在生活中,有许多关系都是一对多的.School(学校)和 Studnet(学生

hibernate级联保存,更新个人遇到的问题

在级联更新的时候,数据库中的数据是增加的,只是外键不存在,导致这样的问题产生的原因是,字表主键ID没有添加到集合中,导致Hibernate找不到子项而执行更新. hibernate级联保存,更新个人遇到的问题,布布扣,bubuko.com

hibernate级联保存问题

今天的遇到一个问题,搞了半天.做个记录 hibernate级联保存,设置了cascade关系,但新增时总是主表insert,从表update.以下为报错信息: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1 网上的解释是id冲突导致的,即数据库中定义了id自增,而类被插入时也被赋予了id. 解决办法:将数据库id自增去掉,重新生成类文件,选择id自增策略选择i

Hibernate多对多级联操作

表与表之间关系回顾(重点) 2 多对多 (1)订单和商品关系,一个订单里面有多个商品,一个商品属于多个订单 (2)用户和角色多对多关系 - 用户: 小王.小马.小宋 - 角色:总经理.秘书.司机.保安 ** 比如小王 可以 是总经理,可以是司机 ** 比如小宋 可以是司机,可以是秘书,可以保安 ** 比如小马 可以是 秘书,可以是总经理 -          一个用户里面可以有多个角色,一个角色里面可以有多个用户 (3)多对多建表:创建第三张表维护关系 Hibernate多对多操作 多对多映射配

hibernate(六) cascade(级联)和inverse关系详解

序言 写这篇文章之前,自己也查了很多的资料来搞清楚这两者的关系和各自所做的事情,但是百度一搜,大多数博文感觉说的云里雾里,可能博主自己清楚是怎么一回事,但是给一个不懂的人或者一知半解的人看的话,别人也看不懂其中的关系,所以我自己写博文的时候,会尽量用通俗通俗在通俗的语言去描述一个概念,希望能尽自己的力量去帮助你们理解.光看我的是不行的,最关键的是要自己动手去实践一遍,能得出一样的结论,那就说明懂了,在我不懂的时候,我就去自己实现它,一次次尝试,慢慢的就总结出规律了. --WH 一.外键 我为什么

ManytOone的级联保存

(1)在many方(如user)添加指向one方(如group)的引用即在user类中增加“ private Group group;”,并生成geter和seter.(2)在geter上添加注解@ManyToOne.@JoinColumn(name="groupId")其中groupId表示生成表的外键名.(3)编写测试程序1)得到Configuration,生成SchemaExport ,在数据库中建立表(如果已存在,立即删除)2)新建Group对象和多个user对象,并设置use

级联保存

可以主表级联多表,也可以多表级联主表,原理是一样的,主要的就是xml的配置上面: cascade="save-update"要加上 主表的xml: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "

SQL图形化操作设置级联更新和删除

SQL级联操作设置 对SQL数据库的表,进行级联操作(如级联更新及删除),首先需要设置表的主外键关系,有两种方法: 第一种: 1. 选择你要进行操作的数据库 2. 为你要创建关系的两个表设置主键 3. 在此数据库的数据库关系图一栏处 =>单击右键=>创建新的关系图=>选择要添加关系的表,单击添加 4. 完成后会在关系图的窗口上生成两个表,在表的某列按钮上长按鼠标左键,并拖到另一张表上 5. 在新弹出的"表和列"的窗口中,设置两个表对应的主外键字段,确定 6. 在外键关

Hibernate各保存方法之间的差 (save,persist,update,saveOrUpdte,merge,flush,lock)等一下

hibernate保存 hibernate要保存的目的是提供一个方法,多.它们之间有许多不同之处,点击此处详细说明.使得差: 一.预赛: 在所有.阐释.供hibernate,,transient.persistent.detached 下边是常见的翻译办法: transient:瞬态或者自由态 persistent:持久化状态 detached:脱管状态或者游离态 脱管状态的实例能够通过调用save().persist()或者saveOrUpdate()方法进行持久化. 持久化实例能够通过调用

js 判断js函数、变量是否存在 JS保存和删除cookie操作,判断cookie是否存在的方法

//是否存在指定函数 function isExitsFunction(funcName) {    try {        if (typeof(eval(funcName)) == "function") {            return true;        }    } catch(e) {}    return false;}//是否存在指定变量 function isExitsVariable(variableName) {    try {        if