春データJPA多くの一方向のマッピング

/ **

  • @author StormMaybin
  • @date 2017年1月17日
    * /

より多くの苦労をやめます!


対多のマッピング関係

JPAでは、@OneToManyと多くの関係を識別します。ワンウェイ多くの団体、唯一の代表エンティティ(会社)は、任意のマッピング・アノテーションを使用する必要はありませんエンティティの数を表し、それにマーク@OneToManyマップを使用していました。

単方向関連の多くを達成するには2つの方法があります。一つは、唯一の@OneToManyを使用することです。この方法で識別されたサードパーティ製のテーブルで関係を保存することです。別の用途は、@JoinColumn @OneToManyをマークしていると、このように関係テーブルを保持するために、マルチパーティ(従業員)の外部キー列を追加することです。

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

おすすめ

転載: www.cnblogs.com/jpfss/p/11058093.html