hibernate--级联添加

  级联添加操作值操作当前数据时.将关联数据也进行操作,就是保存当前数据的同事也将保存和修改关联的数据

  首先绑定对象间的关系;  

    `将多方对象添加到一方对象的集合中  

tm.getStudents().add(sm1);

tm.getStudents().add(sm2);

 设置多方的关联对象为一方对象,   

sm1.setTeacher(tm);
sm2.setTeacher(tm);

  然后添加老师对象.  

s.save(tm);

  设置老师对象时,级联关联对象

<set name="students  cascade="save-update >

eg:设置类set元素中的cascade="save-update" 属性后,当保存对应的老师对象时,会检测变量为student的集合中是否保存有数据, 如果有数据,将其中的对象进行级联操作. 如过被级联的对象时TO,只想save操作,吐过被级联的对象时PO,执行update操作.

  备注:  

    1, 当前进进设置老师对学生的级联, 因此保存老师时, 可以级联学生对象,但是保存学生是不能级联老师对象,,可以通过设置many-to-one元素的cascade属性完成学生到老师的级联.

    2,如果未设置级联操作,而保存具有关联关系的老师对象, 灰关联顺势对象跑出异常;

重点:

  1,如果当前老师对象TO,而是PO,也可以记性上述操作,但是由于有PO 对象一级缓存中已经存在有数据,因此执行的是update语句

  2, 如果老师对象关联的学生对象不是TO,而是PO,被级联后,执行的不是save操作,而是update操作;

   3;如果老师对象在数据库中已经存在有关联的学生数据,而操作是老师数据使用DO数据,将会产生关系的变化,

    4.级联可以设置多方,但是一般开发设置一方即可;

    

时间: 2024-12-05 16:08:02

hibernate--级联添加的相关文章

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

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

Hibernate级联操作解密(inverse和cascade)

总结: Cascade:对级联操作进行限制,有如下几个参数: all : 所有情况下均进行关联操作.  none:所有情况下均不进行关联操作.这是默认值.  save-update:在执行save/update/saveOrUpdate时进行关联操作.  delete:在执行delete时进行关联操作. Inverse:在一对多模型中,只能在一的一方设置,inverse的作用就是在级联发生后,会再次更新子表数据的外键为主表的主键.确保子表外键不会为空. 下面演示一个班级学生的例子(一对多): 班

hibernate级联处理问题

hibernate进行级联处理时,关于一对一的关系应该注意的问题. 1.假如有奖品项item和奖品aword,他们之间的对应关系是 1)item      1:1    aword 奖品项与奖品是一对一的关系,一个奖品项只能包含一个奖品. 2)aword   1:n    item 奖品与奖品项是一对多的关系,一个奖品可以出现在多个奖品项中. 2.在进行hibernate注解配置的时候,他们的关系应该如下: 1)entity   Item <span style="white-space:

hibernate 级联删除报更新失败的问题(org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update)

首先hibernate级联删除的前提是,首先需要在映射文件中配置,配置多表之间的关联关系: 下面以部门表(Dept)和员工表(Emp)为例: 1.在Emp.hbm.xml映射文件中配置many-to-one关系 1 <?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 3 "http:/

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 级联之OneToMany

首先看看表结构! customer表: create table customers (     ID bigint not null    primary key auto_increment,     userName varchar(20) ); Order表: create table orders (     ID bigint not null primary key auto_increment,     customers_ID bigint,    --应该为customers

hibernate级联

cascade和inverse (Employee – Department) Casade用来说明当对主对象进行某种操作时是否对其关联的从对象也作类似的操作,常用的cascade: none,all,save-update,delete, lock,refresh,evict,replicate,persist, merge,delete-orphan(one-to-many).一般对many-to-one,many-to-many不设置级联,在<one-to-one>和<one-to

通过Hibernate实现添加功能

package com.demo.dao; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import com.demo.Login; public class LoginDAO { private Session session=null; private Tr

工作中遇到的问题--Hibernate注解添加在一方和多方的区别

以Good和GoodStatus为例: 一.注解仅添加在一方: @Entity@Table(name = "GOOD")@Where(clause="enabled=1") //Used for logical delete, disabled objects are always hiddenpublic class Good extends AMfgObject implements Serializable { /** serialVersionUID */ 

再谈Hibernate级联删除——JPA下的Hibernate实现一对多级联删除CascadeType.DELETE_ORPHAN

声明: 1.本文系原创,非抄袭或转载过来的. 2.本文论点都亲手做过实验论证. 3.本文所讲的Hibernate配置都基于注解的方式,hbm语法未提供. 非常多人对持久层概念搞不清JPA.Hibernate.EJB3.0的关系,这里做一下简单的说明:JPA是一个持久层设计接口,EJB3.0和Hibernate是详细的实现类,EJB3.0和Hibernate的功能近似相等的(Hibernate没有Session Bean,Spring MVC3的SessionAttribute跟Session B