Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate/JPA自动创建外键,而不是在多对一关联中使用现有外键_Java_Spring_Hibernate_Jpa_Spring Boot - Fatal编程技术网

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默认)
这是SQL表定义:

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")