我有一个具有以下结构的类:
public class Machine {
private Set<Line> lines;
}
现在我想要的是使用Criteria创建一个查询,在那里我可以获得包含特定行的所有机器。
我注意到Criteria有一个Restrictions.in()但是会检查表中的一个字段是否在Collection中,我想反过来这样做。
感谢您帮助我, 干杯, 燕姿
答案 0 :(得分:0)
以下Hibernate文档应该有所帮助: http://docs.jboss.org/hibernate/orm/4.0/manual/en-US/html/querycriteria.html#querycriteria-associations
基本上,您需要创建第二个标准,引用Machine类的lines
元素。即。
Criteria machineCriteria = session.createCriteria(Machine.class);
Criteria lineCriteria = machineCriteria.createCriteria("lines");
lineCriteria.add(Restrictions.eq("fieldNameOfLineClass", valueOfFieldNameOfLineClass);
machineCriteria.list();
答案 1 :(得分:0)
我发现这种语法更有意义,也更紧凑。假设你手中有一个Line实例的id,这可以得到你想要的东西。
// we have a Long lineId
Criteria crit = session.createCriteria(Machine.class)
.createAlias("lines", "line")
.add(Restrictions.eq("line.id", lineId);