Я пытаюсь выполнить запрос в спящем режиме, как следующий 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 автоматически создает таблицу соединений с именем 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))
Но это возвращает всех пользователей, у которых идентификатор не совпадает с идентификатором любого из телефонов.Так что это не то, что я ищу.
Кто-нибудь знает, как это сделать?