Domanda

Ho un mapping Hibernate che sembra qualcosa di simile:

<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

Detto questo, come faccio a interrogare in modo tale che un valore di MyEntity.scalarSet (che è impostato) si trova in una collezione di un altro.

Qualcosa di simile:

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

[modifica] Ho anche provato Restriction.sqlRestriction (..). La query SQL che ho usato è qualcosa di simile:

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

In che '{espansione?}' È sostituito da punti interrogativi separati da virgole (a seconda targetList.size ()).

Ma io sono solo ottenere un

  

Causato da: org.hibernate.MappingException: collezione non era un'associazione: MyEntity.scalarSet

È stato utile?

Soluzione

Il set è un insieme, non una mappatura associazione - ci sono differenze sottili ma importanti. Utilizzando API di query di Hibernate per le collezioni è attualmente non supportato .

È necessario usare sia per HQL, o utilizzare una mappatura associazione uno-a-molti con la creazione di un soggetto con la proprietà a lungo, ad esempio:

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

Altri suggerimenti

Tuttavia, qualcuno ha scritto un cerotto che può o non può finire in Hibernate 3.4

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top