Hibernate Criterios contiene-in en una asociación a una tabla
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
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