如何设置外键名称与@JoinColumn和@MapsId@OneToOne关系更新

在下面的示例中(来自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 来使用 .PostDetailsPostPostPostDetails@MapsId

除此之外,我还添加了

@JoinColumn(foreignKey = @ForeignKey(name = "fk_post"))

因为我想为外键指定自定义名称。不幸的是,Hibernate忽略了我的自定义名称,并为外键分配了自己随机生成的名称。

所以问题是在这种情况下如何设置外键名称(使用时)?我试图在不使用已弃用的Hibernate注释的情况下逃脱。@MapsId@ForeignKey

我测试过的休眠版本是 和 .5.2.125.2.13

我希望我错过了一些东西,但考虑到以前版本中Hibernate的FK名称存在多少问题,这对我来说似乎是一个Hibernate错误。

更新

我在休眠问题跟踪器中创建了一个问题


答案 1

使用@JoinColumn的名称属性。@JoinColumn(名称=“”)


答案 2

推荐