如何创建参数是表中集合字段成员的条件?

时间:2012-08-06 14:46:49

标签: java hibernate criteria hibernate-criteria

我有一个具有以下结构的类:

public class Machine {
    private Set<Line> lines;
}

现在我想要的是使用Criteria创建一个查询,在那里我可以获得包含特定行的所有机器。

我注意到Criteria有一个Restrictions.in()但是会检查表中的一个字段是否在Collection中,我想反过来这样做。

感谢您帮助我, 干杯, 燕姿

2 个答案:

答案 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);