gpt4 book ai didi

java - 如何在使用 @OneToOne 映射和 @MapsId 时强制 hibernate 进行连接

转载 作者:行者123 更新时间:2023-12-01 21:24:42 30 4
gpt4 key购买 nike

我有两个实体:

@Entity
@Table(name = "child")
public class MappedChild {
@Id
@Column(name = "parent_id")
private Long parentId;

@OneToOne
@PrimaryKeyJoinColumn
@MapsId
private MappedParent mappedParent;
}

@Entity
@Table(name = "parent")
public class MappedParent {
@Id
@GeneratedValue
@Column(name = "parent_id")
private Long parentId;

@OneToOne(mappedBy = "mappedParent", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private MappedChild mappedChild;
}

当我加载MappedChild时,我希望 hibernate 以进行JOIN以检索MappedParent。但实际上 hibernate 会执行两次选择,一项用于 MappedChild,另一项用于 MappedParent。我尝试将子映射更改为下一个:

@Entity
@Table(name = "child")
public class MappedChild {
@Id
@GeneratedValue
@Column(name = "child_id")
private Long childId;

@OneToOne
@JoinColumn("parent_id")
private MappedParent mappedParent;
}

之后它按预期工作:hibernate 执行 JOIN 而不是两个选择。但这不是我想要的,我不需要 child 中有两个单独的ID(child_id和parent_id),因为它对于我的情况来说是多余的。我可以修改第一个映射并使 hibernate 执行 JOIN 而不是两个选择吗?

最佳答案

很抱歉,如果我无法正确理解您的问题。但是,根据我收集的信息,您可以尝试使用 @Fetch注释。

语法:

@Fetch(FetchMode.JOIN)

您可以在实体类中使用它,例如:

  @OneToOne
@PrimaryKeyJoinColumn
@Fetch(FetchMode.JOIN)
@MapsId
private MappedParent mappedParent;

此外,我猜@PrimaryKeyJoinColumn在这种情况下是不必要的,如 @MapsId已经完成了工作。

如果我理解错误,请让我更深入地了解这个问题。希望您进一步询问。

谢谢

关于java - 如何在使用 @OneToOne 映射和 @MapsId 时强制 hibernate 进行连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58834852/

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