【发布时间】:2018-08-02 07:23:32
【问题描述】:
在以下示例中(来自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 实体之间建立了单向关系,使用@MapsId 将Post 的ID 用作PostDetails 的ID。
除此之外我还添加了
@JoinColumn(foreignKey = @ForeignKey(name = "fk_post"))
因为我想为外键提供自定义名称。不幸的是,Hibernate 忽略了我的自定义名称,并为外键分配了自己随机生成的名称。
所以问题是在这种情况下如何设置外键名称(使用@MapsId 时)?我尝试在不使用已弃用的 Hibernate @ForeignKey 注释的情况下摆脱困境。
我测试过的休眠版本是5.2.12 和5.2.13。
我希望我遗漏了一些东西,但考虑到 Hibernate 在以前的版本中存在多少 FK 名称问题,这对我来说似乎是一个 Hibernate 错误。
更新
【问题讨论】:
-
尽管github.com/hibernate/hibernate-orm/pull/2566,Hibernate 5.3.15 仍然存在问题。 Hibernate Jira 问题与此类似:hibernate.atlassian.net/browse/HHH-12320hibernate.atlassian.net/browse/HHH-12975hibernate.atlassian.net/browse/HHH-11180
标签: java hibernate foreign-keys hibernate-5.x