Pergunta

Eu tenho um mapeamento do Hibernate que é algo como isto:

<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

Diante disso, como faço para consultar tais que um valor de MyEntity.scalarSet (que é Set) está em uma outra coleção.

Algo como:

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

[editar] Eu também tentei Restriction.sqlRestriction (..). A consulta sql que eu usei é algo como isto:

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

Em que '{expansão?}' É substituída por pontos de interrogação separados por vírgulas (dependendo targetList.size ()).

Mas eu estou apenas começando um

Causada por: org.hibernate.MappingException: coleção não era uma associação: MyEntity.scalarSet

Foi útil?

Solução

O seu conjunto é um grupo, não um mapeamento da associação - há diferenças sutis, mas importantes. Usando API de consulta do Hibernate para coleções é atualmente não suportado .

Você precisa se quer HQL utilização, ou usar um mapeamento de associação um-para-muitos através da criação de uma entidade com Long propriedade, por exemplo:

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

Outras dicas

No entanto, alguém escreveu um remendo que pode ou não pode acabar em hibernação 3.4

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top