【发布时间】:2012-03-23 12:22:51
【问题描述】:
我正在尝试在 hibernate 中进行如下查询:
SELECT phone.* FROM phone WHERE phone.id NOT IN (SELECT phone_id FROM user_phone)
我有以下实体类:
@Entity
class User {
@Id
private Integer id;
@ManyToMany
private Set<Phone> phoneList;
}
还有电话类:
@Entity
class Phone {
@Id
private Integer id;
private String description;
}
Hibernate 自动创建一个名为 user_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 不同的所有用户。所以这不是我要找的。p>
有人知道怎么做吗?
【问题讨论】: