我試圖做一個查詢在休眠像下面的SQL查詢:休眠沒有在結表子查詢
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;
}
和Phone類:
@Entity
class Phone {
@Id
private Integer id;
private String description;
}
Hibernate會自動創建一個junctio名爲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的用戶。所以這不是我要找的。
任何人都知道如何做到這一點?