我收到此错误,我试图在hibernate中使用一对多关系访问子属性:
org.hibernate.QueryException:非法尝试使用元素属性引用[idIniciativa]取消引用集合[sigtccontr0_.ID_OBJETIVO.children] [来自org.citi.tablero.contraloria.planes.model.db.hibernate.dto.SigTcContraloriaObjetivos p其中p.children.idIniciativa = 1]
这是我的疑问:
String sql = "from SigTcContraloriaObjetivos p where p.children.idIniciativa = 1";
Dto's:
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
吗?
更新:使用提供的查询时:“从SigTcContraloriaObjetivos选择p p p.children c其中c.idIniciativa = 1”
query.list()返回:
Object1:
Object2的:
我需要:
答案 0 :(得分:1)
您无法使用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。