zoukankan      html  css  js  c++  java
  • 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();
        }
    
    }

    数据库:

  • 相关阅读:
    leetcode231 2的幂 leetcode342 4的幂 leetcode326 3的幂
    leetcode300. Longest Increasing Subsequence 最长递增子序列 、674. Longest Continuous Increasing Subsequence
    leetcode64. Minimum Path Sum
    leetcode 20 括号匹配
    算法题待做
    leetcode 121. Best Time to Buy and Sell Stock 、122.Best Time to Buy and Sell Stock II 、309. Best Time to Buy and Sell Stock with Cooldown 、714. Best Time to Buy and Sell Stock with Transaction Fee
    rand7生成rand10,rand1生成rand6,rand2生成rand5(包含了rand2生成rand3)
    依图
    leetcode 1.Two Sum 、167. Two Sum II
    从分类,排序,top-k多个方面对推荐算法稳定性的评价
  • 原文地址:https://www.cnblogs.com/lihaoyang/p/4925640.html
Copyright © 2011-2022 走看看