gpt4 book ai didi

java - Hibernate:多对一关系,仅加载一次多关系

转载 作者:行者123 更新时间:2023-12-02 03:23:33 24 4
gpt4 key购买 nike

使用 Hibernate 5.2 和 Java 8我有一个名为 PatientMetaData 的表,其中包含以下字段(在数据库表本身中,hmo 是一个整数):

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int uid;
private String name;
@ManyToOne
@JoinColumn(name="hmo")
private Hmo hmo;

Hmo 表包含一个 uid 和一个名称:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int uid;
private String name;

并且通过hmo表中的uid和患者表中的hmo与患者表相关。

加载所有患者时,我看到每个患者都有一个对其 HMO 的查询。
然而,有 10K 名患者,只有 7 个 HMO,因此为每个患者加载 HMO 似乎是多余的。
我有办法避免所有这些查询吗?

一种选择是定义 PatientMetadata 实体类,将 hmo 作为整数,这样我将只加载患者,然后将所有 HMO 加载到 Java 映射中,最后以语法方式附加从 map 到每位患者的 HMO。

这看起来有点麻烦。
有没有更好的方法直接使用 Hibernate 来做到这一点?

最佳答案

在 @ManyToOne 上使用延迟获取时,Hibernate 会出现奇怪的行为,因此这可能不起作用。

我建议使用 @BatchSize(2 个可能的位置,关于 Hmo 类别或患者的关系)。

根据您检索患者的方式,您还可以在 JPA 标准查询中通过 root.fetch() 获取 Hmos,以便通过左连接加载 HMo。

在我看来,该解决方法实际上是一种黑客行为,应该避免。

关于java - Hibernate:多对一关系,仅加载一次多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39304779/

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