[英]How to force hibernate to do join while using @OneToOne mapping with @MapsId
我有两个实体:
@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 而不是两个选择。 但这不是我想要的,我不需要孩子中有两个单独的 id(child_id 和 parent_id),因为这对于我的情况来说是多余的。 我可以修改第一个映射并使 hibernate 做 JOIN 而不是两个选择吗?
对不起,如果我无法正确理解您的问题。 但是从我可以收集的内容来看,您可以尝试使用@Fetch
注释。
语法:
@Fetch(FetchMode.JOIN)
您可以在您的实体 class 中使用它,例如:
@OneToOne
@PrimaryKeyJoinColumn
@Fetch(FetchMode.JOIN)
@MapsId
private MappedParent mappedParent;
此外,我猜@PrimaryKeyJoinColumn
在这种情况下是不必要的,因为@MapsId
已经完成了这项工作。
如果我理解错了,请让我更深入地了解这个问题。 希望您进一步询问。
谢谢你
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.