@Entity
class A {
@ManyToMany
private List<B> list;
...
}
@Entity
class B {
...
}
我希望使用条件(而不是SQL查询)从A类中获取列表。这可行吗?在这种情况下,投影无法使用。
@Entity
class A {
@ManyToMany
private List<B> list;
...
}
@Entity
class B {
...
}
我希望使用条件(而不是SQL查询)从A类中获取列表。这可行吗?在这种情况下,投影无法使用。
不幸的是,准则只允许选择根实体,而不是任何加入的实体。因此,如果您的ManyToMany是双向的,那么就会更容易。您可以使用等效于准则的方法来实现:
select b from B b inner join b.as a where a = :theA
select b from B b where b.id in (select b2.id from A a inner join a.list b2 where a.id = :theAId)
Criteria c = session.createCriteria(B.class, "b");
DetachedCriteria dc = DetachedCriteria.forClass(A.class, "a");
dc.createAlias("a.list", "b2");
dc.add(Restrictions.eq("a.id", theA.getId()));
dc.setProjection(Projections.property("b2.id"));
c.add(Subqueries.propertyIn("b.id", dc));
假设a是A类的实例,你应该能够调用它。
a.getList();