当前位置: 首页 > 知识库问答 >
问题:

JPA 2-内部连接调用再次查询

秦晋
2023-03-14

我试图在JPA2中进行一些查询,但它不断调用另一个查询来获取依赖项的信息

我的课程是:

@Entity
@Table(name = "tbltranslados")
public class Traslado implements Serializable {

    @OneToOne(optional = true, mappedBy = "traslado", fetch = FetchType.LAZY)
    private TrasladoHora hora;
}

@Entity
@Table(name = "tbltranshora")
public class TrasladoHora implements Serializable {

    @OneToOne(optional = false,fetch=FetchType.LAZY)
    @JoinColumn(nullable = false, name = "thr_TransladosID")
    private Traslado traslado;
}

我把这样的查询称为:

@SuppressWarnings("unchecked")
@Override
public List<Traslado> listarAtivos() {
    return this.session.createQuery("SELECT t , h FROM Traslado t LEFT JOIN t.hora h WHERE t.status=:status ORDER BY t.origem , t.destino")
            .setParameter("status", true)
            .getResultList();
}

但我的结果是:

共有1个答案

龙兴学
2023-03-14

您正面临选择n 1问题。

您得到的第一个查询检索您想要的列表,但为了实例实体Traslado的对象,Hibernate为每个对象调用一个select语句,以确定它是否关联了一个trasladhora,因为该关系映射在trasladhora的表中(我的意思是trasladhora.traslado是这个双向关联的所有者方)。

下面是一个答案,很多人都提出了一些建议,但在Hibernate文档的“调优获取策略”一节中提到了这个问题和一些解决方法

编辑:我还回答了另一个与这个问题相关的问题,也许你会在那里找到更清楚的解释。

 类似资料:
  • 问题内容: 因此,我收到此错误:#1066-不是唯一的表/别名:“购买” 我正在尝试执行以下操作: 空白表包括: 付款表包括: 采购表包括: 票务表包括: MCO_Blank表包含: 我不确定如何进行这项工作。 问题答案: 您需要使用表别名。您在子句中多次提到同一张表。查询是这样的: 我不得不猜测别名应该使用哪种付款方式和购买方式。这些在and子句中可能不正确。

  • 我有一个用spring boot Version1.5.x编写的项目,它连接到一个MariaDB数据库和几个表,它们之间有大量的关系。为了查询数据库,我使用org.springframework.data.jpa.repository中提供的JpaSpecificationExecutor接口。我们使用规范的原因是为了构建动态查询,而不必为存储库本身中的每个筛选可能性编写新的查询。在实体本身中,每

  • 问题内容: 好的,这是。我有两个表:product和product_sizes 所以基本上我的产品表具有id(主键),名称(产品名称)和size_id(product_sizes中的外键) 我的product_sizes表具有预定值: 在这里,我有一个有效的代码来显示产品表(使用while代码以html格式): 我的问题是我想显示(用html表示)尺寸名称而不是其size_id,类似于以下示例:

  • 可再次下载过去已下载的内容。 1. 轻触(选项)>[下载列表]。 显示可再次下载过去已下载的内容。若有使用PS3™等其它主机下载的内容,也会一并显示。 2. 选择想下载的内容后,轻触[下载]。 开始下载。若要确认下载的进度,请在按下PS键后,轻触画面右上角的最新资讯指示灯。 若要下载内容,需先将PS Vita专用存储卡插入PS Vita。 部分内容可能会因无法使用Wi-Fi与互联网连接而无法下载。

  • 问题内容: 我在重构的旧系统中有以下SQL语句。这是此问题的缩写视图,只是暂时返回count(*)。 它会生成大量记录并杀死系统,但是有人可以解释其语法吗?可以用其他任何方式表达吗? 表1包含419行 表2包含3374行 Table3包含28182行 编辑: 建议重新格式化 问题答案: 为了提高可读性,我重新构造了查询…从表1的最顶层开始,然后将其绑定到Table3,然后将table3绑定到tab

  • 我正在对PeopleSoft数据库进行查询,不确定是否可以根据初始查询在一次调用中从同一个表中获取信息。例如,我正在访问的表返回EmployeeID、FullName、FirstName、LastName、Position\u NBR和ReportsTo。但是ReportsTo是以经理的Position\u NBR(在同一个表中找到)的形式提供的,我想以name格式提供。我想这样做,但不确定是否可