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

标签 java hibernate jakarta-ee jpa hql

我收到此错误,我尝试在 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. SigTcContraloriaObjetivos 1.1 SigTcContraloriaIniciativas(子)
  2. SigTcContraloriaIniciativas

对象2:

  1. SigTcContraloriaObjetivos 1.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/

相关文章:

java - Hive:在主表上进行增量更新的最佳方式

java - 如何用连接列指定外键?

java - 如何摆脱 em.persist();

Java 开源列表

java - 当我在 eclipse 中启动 tomcat 时显示错误 java.lang.reflect.InvocationTargetException

java - 为什么即使对于不相等的字符串,equalsignorecase 也会返回 true

java - 在 servlet 响应中使用 Printwriter

java - 将当前日期字符串注入(inject) Spring bean 配置中

eclipse - 在STS eclipse中将hibernate-orm导入为gradle项目

hibernate - 如何分离 jdbc.properties 和我部署的 JAR 或 WAR 应用程序文件