Pregunta

Tengo un mapeo de Hibernate que se ve algo como esto:

<class name="MyEntity">
  <set name="scalarSet" table="(select fk, scalar_value from other_table)">
    <key column="fk"/>
    <property column="scalar_value" type="long"/>
  </set>
</class

En vista de esto, ¿cómo dicha consulta que un valor de MyEntity.scalarSet (que ha sido ajustado) se encuentra en una otra colección.

Algo así como:

criteria.add(Restrictions.in("scalarSet", targetList));

[editar] También he intentado Restriction.sqlRestriction (..). La consulta SQL que he usado es algo como esto:

"1 == (select fk, scalar_value from other_table where fk = {alias}.id and scalar_value in ({expanding?})"

En donde '{expansión?}' Se sustituye por signos de interrogación separados por comas (dependiendo targetList.size ()).

Pero me estoy haciendo un

  

Causado por: org.hibernate.MappingException: colección no era una asociación: MyEntity.scalarSet

¿Fue útil?

Solución

Su conjunto es una colección, no una asociación de mapas - hay diferencias sutiles pero importantes. El uso de la API de consulta de Hibernate para las colecciones es actualmente no es compatible .

Es necesario para cualquiera que use HQL, o utilizar un mapeo de asociación uno-a-muchos mediante la creación de una entidad con la propiedad de largo, por ejemplo:

public class Scalar {
  private Long value;
  public Long getValue() { .... }
  public void setValue(....) { ....}
}

Otros consejos

Sin embargo, alguien ha escrito un parche que puede o no puede terminar en Hibernate 3.4

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top