在Hibernate中更改外键的生成名称

yov*_*786 23 java mysql hibernate

@OneToOne()
@JoinColumn(name="vehicle_id", referencedColumnName="vehicleId")
public Vehicle getVehicle() {
    return vehicle;
}
Run Code Online (Sandbox Code Playgroud)

我的UserDetails类与Entitity类Vehicle具有一对一的映射.Hibernate创建2个表并分配一个通用的外键,它将vehicle_id列(UserDetails表.)映射到主键vehicleId(Vehicle表).

KEY FKB7C889CEAF42C7A1 (vehicle_id),
CONSTRAINT FKB7C889CEAF42C7A1 FOREIGN KEY (vehicle_id) REFERENCES vehicle (vehicleId)
Run Code Online (Sandbox Code Playgroud)

我的问题是:我们如何将生成的外键更改为有意义的内容,例如Fk_userdetails_vehicle.

Moh*_*shi 25

你也可以像这样使用@ForeignKey嵌入式 @JoinColumn:

@JoinColumn(name = "BAR_ID", foreignKey = @ForeignKey(name = FK_BAR_OF_FOO))
Run Code Online (Sandbox Code Playgroud)

对于@ManyToMany您可以使用foreignKeyinverseForeignKey嵌入的关系,@JoinTable如下所示:

@JoinTable(name = "ARC_EMPLOYEE_OF_BAR"
        , joinColumns = {@JoinColumn(name = "BAR_ID")}
        , inverseJoinColumns = {@JoinColumn(name = "EMPLOYEE_ID")}
        , uniqueConstraints = {@UniqueConstraint(name = "ARC_UK_EMPLOYEE_OF_BAR", columnNames = {"EMPLOYEE_ID", "BAR_ID"})}
        , foreignKey = @ForeignKey(name = "ARC_FK_BAR_OF_EMPLOYEE")
        , inverseForeignKey = @ForeignKey(name = "ARC_FK_EMPLOYEE_OF_BAR"))
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案 (4认同)
  • 谢谢。使用 javax.persistence.* (2认同)
  • 这也适用于使用交集表的`@ OneToMany`关系. (2认同)

Eti*_*ret 22

从JPA 2.1开始,您可以使用@ javax.persistence.ForeignKey批注:

@OneToOne()
@JoinColumn(name="vehicle_id", referencedColumnName="vehicleId", foreignKey=@ForeignKey(name = "Fk_userdetails_vehicle"))
public Vehicle getVehicle() {
    return vehicle;
}
Run Code Online (Sandbox Code Playgroud)

在JPA 2.1之前,您可以使用Hibernate的@ org.hibernate.annotations.ForeignKey批注,但现在不推荐使用:

@OneToOne()
@JoinColumn(name="vehicle_id", referencedColumnName="vehicleId")
@ForeignKey(name="Fk_userdetails_vehicle")
public Vehicle getVehicle() {
   return vehicle;
}
Run Code Online (Sandbox Code Playgroud)

  • 这个答案使用了弃用的,特定于Hibernate的API,而不是现成的符合JPA标准的API.它在2013年可能很好,但现在它不再是最佳答案了. (3认同)
  • `这个位置不允许使用注释@ForeignKey. (2认同)