Sto cercando di fare una query in ibernazione come la seguente query SQL:Hibernate NOT IN sottoquery sulla tabella di giunzione
SELECT phone.* FROM phone WHERE phone.id NOT IN (SELECT phone_id FROM user_phone)
ho le seguenti classi di entità:
@Entity
class User {
@Id
private Integer id;
@ManyToMany
private Set<Phone> phoneList;
}
e la classe Telefono:
@Entity
class Phone {
@Id
private Integer id;
private String description;
}
Hibernate crea automaticamente un junctio n tabella chiamata user_phone. Ora vorrei selezionare tutti i telefoni che non sono utilizzati da nessun utente. Non riesco a capire come farlo con Hibernate. Avevo provato la seguente:
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))
Ma che restituisce tutti gli utenti in cui l'ID non è lo stesso che l'id di qualsiasi dei telefoni. Quindi non è quello che sto cercando.
Qualcuno sa come fare?