次の構造を持つクラスがあります。
public class Machine {
private Set<Line> lines;
}
今私がしたいのは、特定の行を含むすべてのマシンを取得できる基準でクエリを作成することです。
Criteria に Restrictions.in() があることに気付きましたが、それはテーブルのフィールドが Collection にあるかどうかをチェックし、逆にしたいのです。
助けてくれてありがとう、乾杯、ステフ
次の構造を持つクラスがあります。
public class Machine {
private Set<Line> lines;
}
今私がしたいのは、特定の行を含むすべてのマシンを取得できる基準でクエリを作成することです。
Criteria に Restrictions.in() があることに気付きましたが、それはテーブルのフィールドが Collection にあるかどうかをチェックし、逆にしたいのです。
助けてくれてありがとう、乾杯、ステフ
以下の Hibernate ドキュメントが役に立ちます: http://docs.jboss.org/hibernate/orm/4.0/manual/en-US/html/querycriteria.html#querycriteria-associations
lines
基本的に、Machine クラスの要素を参照する 2 番目の条件を作成する必要があります。すなわち
Criteria machineCriteria = session.createCriteria(Machine.class);
Criteria lineCriteria = machineCriteria.createCriteria("lines");
lineCriteria.add(Restrictions.eq("fieldNameOfLineClass", valueOfFieldNameOfLineClass);
machineCriteria.list();
この構文はより意味があり、よりコンパクトだと思います。Line インスタンスの ID を手元に持っていると仮定すると、これで必要なものが得られます。
// we have a Long lineId
Criteria crit = session.createCriteria(Machine.class)
.createAlias("lines", "line")
.add(Restrictions.eq("line.id", lineId);