在以下示例中(来自Vlad Mihalcea's post on "The best way to map a @OneToOne relationship with JPA and Hibernate"):
@Entity(name = "PostDetails")
@Table(name = "post_details")
public class PostDetails {
@Id
private Long id;
@Column(name = "created_on")
private Date createdOn;
@Column(name = "created_by")
private String createdBy;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(foreignKey = @ForeignKey(name = "fk_post"))
@MapsId
private Post post;
public PostDetails() {}
public PostDetails(String createdBy) {
createdOn = new Date();
this.createdBy = createdBy;
}
//Getters and setters omitted for brevity
}
我在PostDetails
和Post
个实体之间存在单向关系,并使用Post
重新使用PostDetails
的ID作为@MapsId
的ID。
除此之外我还添加了
@JoinColumn(foreignKey = @ForeignKey(name = "fk_post"))
因为我想给外键提供自定义名称。不幸的是,Hibernate忽略了我的自定义名称,并为外键分配了自己随机生成的名称。
所以问题是如何在这种情况下设置外键名称(使用@MapsId
时)?我试图逃脱而不必使用已弃用的Hibernate @ForeignKey
注释。
我测试过的Hibernate版本是5.2.12
和5.2.13
。
我希望我遗漏了一些东西,但这对我来说似乎是一个Hibernate错误,考虑到HKK在早期版本中有多少与FK名称有关的问题。
答案 0 :(得分:0)
使用@JoinColumn的名称属性。 @JoinColumn(name =“”)