Java Hibernate不在联接表的子查询中
我正在尝试在hibernate中执行类似以下sql查询的查询: 选择phone.*从phone WHERE phone.id不在中的phone中选择phone\u id FROM user\u phone 我有以下实体类:Java Hibernate不在联接表的子查询中,java,sql,hibernate,Java,Sql,Hibernate,我正在尝试在hibernate中执行类似以下sql查询的查询: 选择phone.*从phone WHERE phone.id不在中的phone中选择phone\u id FROM user\u phone 我有以下实体类: @Entity class User { @Id private Integer id; @ManyToMany private Set<Phone> phoneList; } Hibernate会自动创建一个名为user\u
@Entity
class User {
@Id
private Integer id;
@ManyToMany
private Set<Phone> phoneList;
}
Hibernate会自动创建一个名为user\u phone的连接表。现在我想选择所有没有被任何用户使用的手机。我就是想不出用Hibernate怎么做。我试过以下方法:
Session session = (Session) entityManager.getDelegate();
Criteria criteria = session.createCriteria(Phone.class);
DetachedCriteria subCriteria = DetachedCriteria.forClass(User.class);
subCriteria.setProjection(Property.forName("phoneList"));
criteria.add(Subqueries.propertyNotIn("id", subCriteria))
但它返回的所有用户的id与任何手机的id都不相同。所以这不是我想要的
有人知道如何做到这一点吗?既然我来到这里是为了寻找如何形成子查询而不是条件,我想知道其他人是否也会以同样的方式结束这里
Criteria criteria = session.createCriteria(Phone.class)
.add(Subqueries.propertyNotIn("id", DetachedCriteria.forClass(User.class)
.createAlias("phoneList", "phone")
.setProjection(Property.forName("phone.id"))
));
因为我知道了如何在HQL中编写查询,所以我想分享解决方案,以防万一:
从电话p,其中p.id不在中从用户u选择ph.id加入u.phoneList ph
在一个类似的场景中为我工作。希望有帮助
Criteria criteria = session.createCriteria(Phone.class)
.add(Subqueries.propertyNotIn("id", DetachedCriteria.forClass(User.class)
.createAlias("phoneList", "phone")
.setProjection(Property.forName("phone.id"))
));