Frage

Ich habe eine Hibernate Mapping, die etwa wie folgt aussieht:

<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

Vor diesem Hintergrund, wie kann ich abfragen, so dass ein Wert von MyEntity.scalarSet (das Set ist) in einer anderen Sammlung ist.

So etwas wie:

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

[Bearbeiten] Ich habe auch versucht, Restriction.sqlRestriction (..). Die SQL-Abfrage, die ich verwendet wird, ist so etwas wie folgt aus:

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

Wobei '{erweitern?}' Durch Komma getrennt Fragezeichen (je nach targetList.size ()).

ersetzt

Aber ich bin nur immer ein

  

Verursacht durch: org.hibernate.MappingException: Sammlung war kein Verein: MyEntity.scalarSet

War es hilfreich?

Lösung

Ihr Set ist eine Sammlung, kein Verein Mapping - es gibt subtile, aber wichtige Unterschiede. Hibernate mit Query-API für Sammlungen ist derzeit nicht unterstützt .

Sie müssen entweder HQL verwenden oder eine Eins-zu-viele Assoziationskartierung verwenden, indem ein Unternehmen mit langer Eigenschaft, zum Beispiel zu erstellen:

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

Andere Tipps

Allerdings hat jemand ein Patch geschrieben die in dem Ruhezustand kann am Ende oder nicht 3.4

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top