zoukankan      html  css  js  c++  java
  • Spring Data Jpa一对多单向映射

    /**

    • @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)
原文地址:https://www.jianshu.com/p/0a2163273b3e
查看全文
  • 相关阅读:
    TI科学家谈浮点DSP未来发展
    请爱护你的JTAG烧录口---记录
    程序猿必看
    富人与穷人的区别--转自红尘
    DSP已经英雄迟暮了吗?FPGA才是未来的大杀器?
    FPGA+ARM or FPGA+DSP?
    DDR3调试记录
    调试记录1
    有关FPGA
    Nginx常见配置说明
  • 原文地址:https://www.cnblogs.com/jpfss/p/11058093.html
  • Copyright © 2011-2022 走看看