[英]Hibernate/JPA auto creates foreign key instead of using exisiting foreign key in many to one association
我用:
這是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.