gpt4 book ai didi

java - 如何使用@JoinColumn 和@MapsId 在@OneToOne 关系中设置外键名称

转载 作者:行者123 更新时间:2023-12-03 10:03:45 26 4
gpt4 key购买 nike

在以下示例中(来自 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 的 ID作为 PostDetails 的 ID使用 @MapsId .

除此之外,我还添加了
@JoinColumn(foreignKey = @ForeignKey(name = "fk_post"))

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

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

我测试过的 hibernate 版本是 5.2.125.2.13 .

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

更新

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

最佳答案

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

关于java - 如何使用@JoinColumn 和@MapsId 在@OneToOne 关系中设置外键名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48927491/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com