hibernate关联关系的crud之级联

cascade级联,只会影响CRUD的CUD,不会影响读取。不设置级联,从多的一方能读出一的一方,设了级联,从一的一方,默认也不能读出多的一方。

如果两个对象之间有关联,不管是一对多,多对一,单向还是双向,如果从A可以导向到B:

A--->B

默认情况下对A的保存不会影响到B,除非设cascade。如果A--->B--->C,从A能导航到B,B能导航到C,在B上也加上级联,对A的操作就能影响到C,但是,级联不是必须的,它只是让编程稍有方便。完全可以手动先存C,再存B,再存A.。

例子:Group类:

package com.oracle.hibernate;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="t_group")//group是mysql的关键字,换个名
public class Group {

    private int id;
    private String name;

    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

}

User类:

package com.oracle.hibernate;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

@Entity
public class User {

    private int id;
    private String name;
    private Group  group;

    //多对一,级联。
    @ManyToOne(cascade={CascadeType.ALL})
    @JoinColumn(name="groupId")//指定外键名称
    public Group getGroup() {
        return group;
    }
    public void setGroup(Group group) {
        this.group = group;
    }
    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

}

测试:

package com.oracle.hibernate;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.AfterClass;
import org.junit.BeforeClass;

public class Test {

    private static SessionFactory  sf = null;
    @BeforeClass
    public static void beforeClass(){

        try {
            new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
            sf = new AnnotationConfiguration().configure().buildSessionFactory();
        } catch (HibernateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @org.junit.Test
    public void testSchemaExport(){
        new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);

    }
    @AfterClass
    public static void afterClass(){
        sf.close();
    }

    @org.junit.Test
    public void testSave(){

        Session  s = sf.getCurrentSession();
        s.beginTransaction();
        User user = new User();
        user.setName("u1");
        Group g = new Group();
        g.setName("g1");
        user.setGroup(g);
        //s.save(g);默认不会自动保存关联变量,
        //设置cascade后,直接保存user就能把user的group也保存
        s.save(user);
        s.getTransaction().commit();
    }

}

数据库:

时间: 2024-12-29 04:27:45

hibernate关联关系的crud之级联的相关文章

Hibernate关联关系的CRUD

本文以Group和User(一对多.多对一)双向关联为例,介绍关联关系的CRUD   下面先介绍两个属性 cascade:只影响CRUD中的CUD,即存储(save).更新(update).删除(delete) fetch:只影响CRUD中的R,即读取(get.load)   cascade(级联): 此属性仅仅帮助我们简化编程,不是必选项 如果A和B为单向关联,则在主导方设置cascade属性 如果A和B为双向关联,则在双方都要设置cascade属性 如果两个对象之间有关联关系,比如User和

Hibernate中关联关系的CRUD(增删改查)

关联关系的CRUD(增删改查) 一.增加数据 1.User和Group的关联关系:User对Group是Many-To-One,Group对User是One-To-Many 2.默认情况下,不会自动保存尚未保存关联的对象.因为对象没有保存的情况下,对象是Transient状态,此时数据库中并没有存储,所以获取不到该对象. 3.使用级联cascade方式可以自动将关联的对象进行存储.其取值有ALL,PERSIST,REFRESH,REMOVE,DETACH,MERGE这几种取值.其中,ALL表示在

Hibernate对象的CRUD操作

1.  Hibernate对象的CRUD操作 1.1.  对象的三种状态 瞬时(Transient) - 由new操作符创建,且尚未与HibernateSession 关联的对象被认定为瞬时(Transient)的.瞬时(Transient)对象不会被持久化到数据库中,也不会被赋予持久化标识(identifier).如果瞬时(Transient)对象在程序中没有被引用,它会被垃圾回收器(garbage collector)销毁.使用Hibernate Session可以将其变为持久(Persis

Hibernate Annotation关系映射, 级联cascade属性

Hibernate Annotation关系映射, 级联cascade属性一. Hibernate Annotation关系映射 1.一对一外键关联映射(单向) 2.一对一外键关联映射(双向) 3.一对一主键关联映射(不重要)在这不演示 在实际中很少用,使用注解@PrimaryKeyJoinColumn 意思是说,我的主键去参考另外一张表中的主键,作为我的主键,但是在我测试使用 注解一对一主键关联映射,在生成表的时候,数据库中并没有生成关联,使用XML 映射可以生成.Annotation注解一对

使用hibernate作为底层,jquery实现级联操作(附带oracle数据库)

原文:使用hibernate作为底层,jquery实现级联操作(附带oracle数据库) 源代码下载地址:http://www.zuidaima.com/share/1564685226675200.htm 为了减轻压力,项目中的hibernate jar包已经删除.请自行增加即可正常运行.若没有jar包请在官方群:南京-木木-11187  或者私信我索要. 备注:数据库在项目根目录的db文件夹下,双击run.bat即可导入.(PS:请用文本文档打开看下用户名和密码是否和你的一致.)如果出现不懂

Hibernate关联关系映射(单向篇)

Hibernate关联关系可分为单向关联和双向关联两大类.单向关联可以分为一对一.一对多.多对一和多对多4种关联方式,而多向关联可以分为一对一.一对多和多对多3种关联方式. Hibernate连接管理类HibernateUtil.java public class HibernateUtil { private static SessionFactory sessionFactory; private static final ThreadLocal<Session> threadLocal

hibernate(十)关联关系的CRUD

一.保存 1. 假设一个group有多个user,一个user只属于一个group,当保存user对象到数据库中时可以 User u = new User(); u.setName("u1"); Group g = new Group(); g.setName("g1"); u.setGroup(g); Session s = sessionFactory.getCurrentSession(); s.beginTransaction(); s.save(g);//

Hibernate关联关系(二) Cascade级联

1.cascade定义的是关系两端对象到对象的级联关系:而inverse定义的是关系和对象的级联关系. all : 所有情况下均进行关联操作.  none:所有情况下均不进行关联操作.这是默认值.  save-update:在执行save/update/saveOrUpdate时进行关联操作.  delete:在执行delete时进行关联操作. 2.CascadeType CascadeType.REFRESH:级联刷新,当多个用户同时作操作一个实体,为了用户取到的数据是实时的,在用实体中的数据

关联关系的CRUD

关联关系中的CRUD_Cascade_Fetch 1. hibernate_1700_one2many_many2one_bi_crud 2. 设定 cascade 可以设定在持久化时对于关联对象的操作(CUD,R归Fetch管) 3. cascade 仅仅是帮我们省了编程的麻烦而已,不要把它的作用看的太大 a) Cascade 的属性指明做什么操作的时候关联对象是绑在一起的 b) Merge = save + update c) refresh = A 里面需要度 B 改过之后的数据 4. 铁