【问题标题】:How to set Foreign key name in @OneToOne relation with @JoinColumn and @MapsId如何使用@JoinColumn 和@MapsId 在@OneToOne 关系中设置外键名称
【发布时间】: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
}

我在PostDetailsPost 实体之间建立了单向关系,使用@MapsIdPost 的ID 用作PostDetails 的ID。

除此之外我还添加了

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

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

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

我测试过的休眠版本是5.2.125.2.13

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

更新

我创建了一个issue in the Hibernate issue tracker

【问题讨论】:

标签: java hibernate foreign-keys hibernate-5.x


【解决方案1】:

使用@JoinColumn 的名称属性。 @JoinColumn(name="")

【讨论】:

  • 例如@JoinColumn(name="pidFk")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 1970-01-01
  • 2021-06-19
  • 2013-04-05
  • 2021-01-23
  • 1970-01-01
相关资源
最近更新 更多