J'essaie de générer une requête HQL qui inclut l'utilisateur avec une collection d'appointements vide (mappée par OneToMany):
SELECT u FROM User u JOIN u.appointments uas WHERE u.status = 1 AND (uas.time.end < :date OR size(uas) = 0)
Je l'essaye de plusieurs manières (NOT EXIST ELEMENT(), IS NULL
) voir aussi: Comment vérifier si la collection est vide dans NHibernate (HQL)? (Cela ne fonctionne pas pour moi)
mais toujours pas le résultat que je veux voir ou une erreur dans HQL ou SQL SERVER
Remarque:
la requête sans JOIN fonctionne:
"FROM User u WHERE u.status = 1 AND size(u.appointments) = 0"
Résolu
Un autre JOIN a résolu le problème:
SELECT u FROM User u LEFT JOIN u.appointments pas1 LEFT JOIN pas1.slot t WHERE u.status = 1 AND t.end <= :date1 OR t.end IS NULL ORDER BY u.name asc
En utilisant IS EMPTY
devrait fonctionner (je préférerais une syntaxe JPQL):
SELECT u FROM User u WHERE u.status = 1 AND u.appointments IS EMPTY
Si ce n'est pas le cas, veuillez afficher le SQL généré.
Avez-vous jeté un œil à votre SQL généré? Votre méthode fonctionne bien ici:
// Hibernate query:
const string hql = "from User u where u.Id = 101 and size(u.Appointments) = 0";
// Generates this working SQL:
select user0_.Id as Id20_,
user0_.Name as Name2_20_
from User user0_
where user0_.Id = 101
and (select count(appointment1_.Id_Solicitud)
from Appointment appointment1_
where user0_.Id = appointment1_.Id_User) = 0
// Hibernate query:
const string hql = "from User u where u.Id = 101 and size(u.Appointments) = 0";