Sping Data Jpa 一对多单向映射

来源:互联网 发布:c语言data是什么意思 编辑:程序博客网 时间:2024/05/20 09:48

/**
* @author StormMaybin
* @date 2017-01-17
*/


生命不息,奋斗不止!


一对多映射关系

 在JPA中,用@OneToMany来标识一对多的关系。实现一对多的单向关联,只需在代表一的实体(Company)中使用@OneToMany映射标注就可以了,代表多的实体不需要使用任何映射标注。

  有两种方式实现一对多的单向关联。一种是在只使用@OneToMany来标识,这种方式是通过一张第三方表来保存关系。还有一种是使用@OneToMany和@JoinColumn来标注,这种方式是在多的一方(Employee)的表中增加一个外键列来保存关系。

OneToMany

Company.java

package com.stormma.model;import java.util.List;import javax.persistence.CascadeType;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.OneToMany;import javax.persistence.Table;/** * Created by mayongbin01 on 2017/1/17. */@Entity@Table(name = "company")public class Company {    //唯一标识公司    @Id    @GeneratedValue    private int id;    //公司名字    private String name;    @OneToMany(cascade = {CascadeType.ALL})    private List<Employee> employees;    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;    }}

Employee.java

package com.stormma.model;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.Table;/** * Created by mayongbin01 on 2017/1/17. */@Entity@Table(name = "employee")public class Employee {    //唯一标识雇员    @Id    @GeneratedValue    private int id;    private String name;    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;    }}

生成的表结构

CREATE TABLE `employee` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name` varchar(255) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;DROP TABLE IF EXISTS `company`;CREATE TABLE `company` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name` varchar(255) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;DROP TABLE IF EXISTS `company_employees`;CREATE TABLE `company_employees` (  `company_id` int(11) NOT NULL,  `employees_id` int(11) NOT NULL,  UNIQUE KEY `UK_lg2r1rg13q18sa62l1y7un4or` (`employees_id`),  KEY `FKd66w6jx84tydyd8sf9mpqh5je` (`company_id`),  CONSTRAINT `FKd66w6jx84tydyd8sf9mpqh5je` FOREIGN KEY (`company_id`) REFERENCES `company` (`id`),  CONSTRAINT `FKnntnqhhla66c4h9ddbnlvqk2x` FOREIGN KEY (`employees_id`) REFERENCES `employee` (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;
OneToMany+JoinColumn

Company.java

package com.stormma.model;import java.util.List;import javax.persistence.CascadeType;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.OneToMany;import javax.persistence.Table;/** * Created by mayongbin01 on 2017/1/17. */@Entity@Table(name = "company")public class Company {    //唯一标识公司    @Id    @GeneratedValue    private int id;    //公司名字    private String name;    @OneToMany(cascade = CascadeType.ALL)    @JoinColumn(name = "company_id")    private List<Employee> employees;    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;    }}

Employee.java

package com.stormma.model;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.Table;/** * Created by mayongbin01 on 2017/1/17. */@Entity@Table(name = "employee")public class Employee {    //唯一标识雇员    @Id    @GeneratedValue    private int id;    private String name;    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;    }}

结构

Hibernate: create table company (id integer not null auto_increment, name varchar(255), primary key (id))Hibernate: create table employee (id integer not null auto_increment, name varchar(255), company_id integer, primary key (id))Hibernate: alter table employee add constraint FK5v50ed2bjh60n1gc7ifuxmgf4 foreign key (company_id) references company (id)
2 0
原创粉丝点击