簡體   English   中英

Hibernate / JPA自動創建外鍵而不是在多對一關聯中使用現有外鍵

[英]Hibernate/JPA auto creates foreign key instead of using exisiting foreign key in many to one association

我用:

  • SpringBoot 1.5.1
  • MariaDB / MySQL 10.1.14 / 15.1
  • org.hibernate.dialect.MySQL5Dialect
  • Hibernate5(SpringBoot默認)

這是SQL-Table-Definition:

CREATE TABLE salaries (
emp_no      BIGINT          NOT NULL,
salary      BIGINT          NOT NULL,
from_date   DATETIME        NOT NULL,
to_date     DATETIME        NOT NULL,
FOREIGN KEY (emp_no) REFERENCES employees (emp_no),
PRIMARY KEY (emp_no, from_date)
) 

這是關聯多方面的實體(使用嵌入式ID):

@Entity
@Table(name = "salaries")
public class Salary {

    @EmbeddedId
    private EmpIdFromDatePK empId;

    @Column(name = "to_date", columnDefinition = "DATETIME")
    @Temporal(TemporalType.TIMESTAMP)
    private Date toDate;

    @Column(name = "salary")
    private Long salary;

    @ManyToOne(fetch = FetchType.LAZY)
    @Fetch(FetchMode.JOIN)
    @MapsId("empId")
    @JoinColumns({@JoinColumn(foreignKey = @ForeignKey(name = "salaries_ibfk_1"), name = "emp_no", referencedColumnName = "emp_no")})
    private Employee employee;

    public Salary() {
        super();
    }

    //...
}

關鍵類:

@Embeddable
public class EmpIdFromDatePK implements Serializable {

    @Column(name = "emp_no")
    private Long empId;

    @Column(name = "from_date", columnDefinition = "DATETIME")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fromDate;

    public EmpIdFromDatePK() {
        super();
    }

    //....
} 

而協會一方的實體:

@Entity
@Table(name = "employees")
public class Employee {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "emp_no")
    private Long empId;

    //...

    @OneToMany(mappedBy = "employee")
    private List<Salary> salaryList;

    //...
}

問題:當我使用ManyToOne關聯時(例如,在員工加入工資記錄的選擇中),在數據庫中創建了第二個外鍵:

CONSTRAINT `FKjojacp79fphmajxrdll8fvf5o` FOREIGN KEY (`emp_no`) REFERENCES `employees` (`emp_no`),
CONSTRAINT `salaries_ibfk_1` FOREIGN KEY (`emp_no`) REFERENCES `employees` (`emp_no`)

問題:我該如何避免這種行為?

提前致謝

你可以嘗試:

@JoinColumn(name="emp_no", referencedColumnName="emp_no")
@ForeignKey(name="salaries_ibfk_1")

JPA 2.1僅支持通過@ForeignKey批注定義外鍵。

所以如果你使用JPA舊版本而不是2.1,我認為你不能這樣做

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM