Java Hibernate/JPA自动创建外键,而不是在多对一关联中使用现有外键
我使用:Java Hibernate/JPA自动创建外键,而不是在多对一关联中使用现有外键,java,spring,hibernate,jpa,spring-boot,Java,Spring,Hibernate,Jpa,Spring Boot,我使用: SpringBoot 1.5.1 MariaDB/MySQL 10.1.14/15.1 org.hibernate.dialogue.mysql5dialogue Hibernate5(SpringBoot默认) 这是SQL表定义: CREATE TABLE salaries ( emp_no BIGINT NOT NULL, salary BIGINT NOT NULL, from_date DATETIME
- SpringBoot 1.5.1
- MariaDB/MySQL 10.1.14/15.1
- org.hibernate.dialogue.mysql5dialogue
- Hibernate5(SpringBoot默认)
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):
关键类:
@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;
//...
}
问题:我如何避免这种行为
提前感谢您可以试试:
@JoinColumn(name="emp_no", referencedColumnName="emp_no")
@ForeignKey(name="salaries_ibfk_1")
?JPA 2.1仅支持通过注释定义外键
因此,如果您使用的是JPA 2.1以外的旧版本,我认为您不能这样做,因为它只是一个单列外键,一个简单的
@JoinColumn
解决了这个问题:@JoinColumn(foreignKey=@foreignKey(name=“salaries\u ibfk\u 1”)、name=“emp\u no”、referencedColumnName=“emp\u no”)
。非常感谢。PS:@ForeignKey
没有像你描述的那样嵌套对我不起作用
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")