que estoy tratando de hacer una consulta en hibernación como la siguiente consulta SQL:Hibernate NO EN subconsulta en la tabla de unión
SELECT phone.* FROM phone WHERE phone.id NOT IN (SELECT phone_id FROM user_phone)
tengo las siguientes clases de entidades:
@Entity
class User {
@Id
private Integer id;
@ManyToMany
private Set<Phone> phoneList;
}
y la clase de teléfono:
@Entity
class Phone {
@Id
private Integer id;
private String description;
}
Hibernate crea automáticamente un junction n tabla llamada user_phone. Ahora me gustaría seleccionar todos los teléfonos que no usa ningún usuario. Simplemente no puedo entender cómo hacer eso con Hibernate. Había intentado lo siguiente:
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))
Pero que devuelve todos los usuarios en el que el ID no es el mismo que el ID de cualquiera de los teléfonos. Entonces eso no es lo que estoy buscando.
¿Alguien sabe cómo hacer esto?