gpt4 book ai didi

java - 在 hibernate 中检索子属性时出错

转载 作者:行者123 更新时间:2023-12-01 14:30:02 27 4
gpt4 key购买 nike

我收到此错误,我尝试在 hibernate 中使用一对多关系访问子属性:

org.hibernate.QueryException: illegal attempt to dereference collection [sigtccontr0_.ID_OBJETIVO.children] with element property reference [idIniciativa] [from org.citi.tablero.contraloria.planes.model.db.hibernate.dto.SigTcContraloriaObjetivos p where p.children.idIniciativa = 1]

这是我的查询:

String sql = "from SigTcContraloriaObjetivos p where p.children.idIniciativa = 1";

Dto:

public class SigTcContraloriaObjetivos {

private Long idObjetivo;
private String descripcion;
private Set<SigTcContraloriaIniciativas> children;

public class SigTcContraloriaIniciativas {

private Long idIniciativa;
private String descripcion;
private Long idObjetivo;

映射:

<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" />

</class>

知道如何访问idIniciativa吗?

更新:使用提供的查询时:“select p from SigTcContraloriaObjetivos p join p.children c where c.idIniciativa = 1”

query.list() 返回:

对象1:

  1. SigTcContraloriaObjetivos1.1 SigTcContraloriaIniciativas(子)
  2. SigTcContraloriaIniciativas

对象2:

  1. SigTcContraloriaObjetivos1.1 SigTcContraloriaIniciativas(子)
  2. SigTcContraloriaIniciativas

我需要:

  1. 对象 1:SigTcContraloriaObjetivos -> SigTcContraloriaIniciativas( child )
  2. 对象 2:SigTcContraloriaObjetivos -> SigTcContraloriaIniciativas( child )

最佳答案

您无法使用 Hibernate 以这种方式访问​​集合。像下面这样的东西应该有效:

select p from SigTcContraloriaObjetivos p join p.children c where c.idIniciativa = 1

请参阅此处了解更多信息:http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql-joins

注意,这是针对 Hibernate 3.3 的。

关于java - 在 hibernate 中检索子属性时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16928400/

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