zoukankan      html  css  js  c++  java
  • hibernate(八)一对多关联

    一、一对多单向关良

    一对多单向关联与多对一相似

    假设一个组有多个用户,即一(Group)对多(User)

    需要在Group类中添加一个User类的Set集合(数据库中的用户不可能是重复的,所以要用Set)属性:private Set<User> users;然后在getUser()方法上添加注解:
    @OneToMany和@JoinColumn(name="groupId"),如果不加@JoinColumn则会自动生成一个中间表

    Group类:

    package cn.orlion.hibernate.model;
    
    import java.util.Set;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.OneToMany;
    import javax.persistence.Table;
    
    @Entity
    @Table(name="t_group")
    public class Group {
    
        private int id;
        
        private String name;
        
        private Set<User> users;
        @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;
        }
        @OneToMany
        @JoinColumn(name="groupId")
        public Set<User> getUsers() {
            return users;
        }
    
        public void setUsers(Set<User> users) {
            this.users = users;
        }
    }

    User类:

    package cn.orlion.hibernate.model;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    @Entity
    @Table(name="t_user")
    public class User {
    
        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;
        }
    }

    生成的sql:

    create table t_group (
            id integer not null auto_increment,
            name varchar(255),
            primary key (id)
        )
    
    create table t_user (
            id integer not null auto_increment,
            name varchar(255),
            groupId integer,
            primary key (id)
        )
    
    alter table t_user 
            add constraint FK_7ktm6l2qkykpqrf6oq01ys8wy 
            foreign key (groupId) 
            references t_group (id)

    二、一对多双向关联

    配置方式:在Group类中的getUsers()方法上添加注解@OneToMany(mappedBy="group"),如果不写mappedBy则会在user表中生成两个groupid字段

    ;然后在User类中添加group属性,在getGroup()方法上添加注解@ManyToOne

    Group类:

    package cn.orlion.hibernate.model;
    
    import java.util.Set;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.OneToMany;
    import javax.persistence.Table;
    
    @Entity
    @Table(name="t_group")
    public class Group {
    
        private int id;
        
        private String name;
        
        private Set<User> users;
        @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;
        }
        @OneToMany(mappedBy="group")
        public Set<User> getUsers() {
            return users;
        }
    
        public void setUsers(Set<User> users) {
            this.users = users;
        }
    }

    User类:

    package cn.orlion.hibernate.model;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.ManyToOne;
    import javax.persistence.Table;
    
    @Entity
    @Table(name="t_user")
    public class User {
    
        private int id;
        
        private String name;
        
        private 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;
        }
        @ManyToOne
        public Group getGroup() {
            return group;
        }
    
        public void setGroup(Group group) {
            this.group = group;
        }
    }

    生成的sql

    create table t_group (
            id integer not null auto_increment,
            name varchar(255),
            primary key (id)
        )
    
    create table t_user (
            id integer not null auto_increment,
            name varchar(255),
            group_id integer,
            primary key (id)
        )
    
    alter table t_user 
            add constraint FK_e5f24mh6aryt9hsy99oydps6g 
            foreign key (group_id) 
            references t_group (id)
  • 相关阅读:
    设计模式-11-代理模式
    设计模式-10-装饰者
    设计模式-9-组合
    设计模式-8-适配器
    设计模式-7-原型模式
    设计模式-6-建造者
    设计模式-5-单例模式
    u-boot-1.1.6 设置新分区支持设备树
    u-boot-2014.10移植(8)重定位,支持NAND启动
    u-boot-2014.10移植(7)修改环境变量的存储位置
  • 原文地址:https://www.cnblogs.com/orlion/p/5083636.html
Copyright © 2011-2022 走看看