gpt4 book ai didi

java - 使用映射进行 hibernate 一对多查询

转载 作者:行者123 更新时间:2023-11-30 04:21:15 25 4
gpt4 key购买 nike

我有 3 个类,它们具有对应的父子关系:

//SigTcContraloriaObjetivos、SigTcContraloriaIniciativas、SigTcContraloriaAcciones

<class dynamic-insert="false" dynamic-update="true" mutable="true" name="org.citi.tablero.contraloria.planes.model.db.hibernate.dto.SigTcContraloriaObjetivos" optimistic-lock="version" polymorphism="implicit" select-before-update="false" table="SIG_TC_CONTRALORIA_OBJETIVOS">
<id column="ID_OBJETIVO" name="idObjetivo">
<generator class="sequence">
<param name="sequence">SEQ_SIG_CONTRALORIA_OBJETIVOS</param>
</generator>
</id>
<property column="DESCRIPCION" name="descripcion"/>
<set name="children" inverse="false" cascade="all" lazy="false">
<key column="ID_OBJETIVO"/>
<one-to-many class="SigTcContraloriaIniciativas"/>
</set>
</class>

<class dynamic-insert="false" dynamic-update="true" mutable="true" name="org.citi.tablero.contraloria.planes.model.db.hibernate.dto.SigTcContraloriaIniciativas" optimistic-lock="version" polymorphism="implicit" select-before-update="false" table="SIG_TC_CONTRALORIA_INICIATIVAS">
<id column="ID_INICIATIVA" name="idIniciativa">
<generator class="sequence">
<param name="sequence">SEQ_SIG_CONTRALORIA_INICIATIVA</param>
</generator>
</id>
<property column="DESCRIPCION" name="descripcion"/>
<property column="ID_OBJETIVO" name="idObjetivo" />
<set name="children" inverse="false" cascade="all" lazy="false">
<key column="ID_INICIATIVA"/>
<one-to-many class="SigTcContraloriaAcciones"/>
</set>
</class>

<class dynamic-insert="false" dynamic-update="true" mutable="true" name="org.citi.tablero.contraloria.planes.model.db.hibernate.dto.SigTcContraloriaAcciones" optimistic-lock="version" polymorphism="implicit" select-before-update="false" table="SIG_TC_CONTRALORIA_ACCIONES">
<id column="ID_ACCION" name="idAccion">
<generator class="sequence">
<param name="sequence">SEQ_SIG_CONTRALORIA_ACCIONES</param>
</generator>
</id>
<property column="DESCRIPCION" name="descripcion"/>
<property column="ID_INICIATIVA" name="idIniciativa" />
<property column="ID_ORGANIZACION" name="idOrganizacion" />
</class>

我需要一种方法来选择一个 SigTcContraloriaIniciativa 以及关联的 SigTcContraloriaObjetivo 和关联的 SigTcContraloriaAccion

这是我使用的查询:

String sql = "select distinct p from SigTcContraloriaObjetivos p join p.children c join c.children b where and b.idOrganizacion = 8";

(在数据库中,我只有一个 idOrganizacion= 8 的 SigTcContraloriaAccion,因此我的预期结果是一个 SigTcContraloriaObjetivos 以及相应的 SigTcContraloriaIniciativas 和选择的相应 SigTcContraloriaAccion)

我的问题是,当我执行query.list()时,它会为每个SigTcContraloriaIniciativas返回一个SigTcContraloriaObjetivos(如预期)、两个SigTcContraloriaIniciativas(不是预期的,我只预期一个)和两个SigTcContraloriasAcciones(仅预期一个)

更新:

这是表格的图像:

TABLES

最佳答案

我认为您的查询返回了正确的结果,但您不理解它。

正如您所说,正在返回正确的 SigTcContraloriaObjetivos 对象。您返回的是对象及其所有关联(假设获取类型为 EAGER)。不过,这些关联不会根据您的查询进行过滤。

我想你正在期待:

SigTcContraloriaObjetivos (ID=1)
----- SigTcContraloriaIniciativas (ID=1)
----- SigTcContraloriaAcciones (ID=5)

JPA/Hibernate 不是这样工作的。此类查询的结果将始终是满足条件的对象,并且这些对象将包含其所有关联对象。

关于java - 使用映射进行 hibernate 一对多查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16967482/

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