如何设置外键名称与@JoinColumn和@MapsId@OneToOne关系更新
2022-09-03 16:14:51
在下面的示例中(来自Vlad Mihalcea关于“与JPA和Hibernate映射@OneToOne关系的最佳方法”的帖子):
@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
}
我在 和 实体 之间有单向关系,重用 AS ID 的 ID 来使用 .PostDetails
Post
Post
PostDetails
@MapsId
除此之外,我还添加了
@JoinColumn(foreignKey = @ForeignKey(name = "fk_post"))
因为我想为外键指定自定义名称。不幸的是,Hibernate忽略了我的自定义名称,并为外键分配了自己随机生成的名称。
所以问题是在这种情况下如何设置外键名称(使用时)?我试图在不使用已弃用的Hibernate注释的情况下逃脱。@MapsId
@ForeignKey
我测试过的休眠版本是 和 .5.2.12
5.2.13
我希望我错过了一些东西,但考虑到以前版本中Hibernate的FK名称存在多少问题,这对我来说似乎是一个Hibernate错误。