Überwintert Criteria enthält-in auf einem Verband auf eine Tabelle
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 ()).
ersetztAber ich bin nur immer ein
Verursacht durch: org.hibernate.MappingException: Sammlung war kein Verein: MyEntity.scalarSet
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