복붙노트

[SQL] 콜렉션의 크기가 0 또는 비어있는 경우 쿼리 HQL 확인하기

SQL

콜렉션의 크기가 0 또는 비어있는 경우 쿼리 HQL 확인하기

나는 (OneToMany에 의해 매핑) 빈 일정이 있습니다 컬렉션을 가지고있는 사용자를 포함 HQL 쿼리를 생성하려고 :

SELECT u FROM User u JOIN u.appointments uas WHERE u.status = 1 AND (uas.time.end < :date OR size(uas) = 0)

나는 몇 매너 (ELEMENT를 (존재하지), NULL IS)에 그것을 시도 또한 참조 : 컬렉션은 NHibernate에 (HQL)에 비어 있는지 확인하는 방법? (이것은 나를 위해 작동하지 않습니다)

여전히 내가 볼 또는 HQL 또는 SQL 서버에 일부 오류 싶어 발생하지

노트 :

작품에 가입하지 않고 쿼리 :

"FROM User u WHERE u.status = 1 AND size(u.appointments) = 0"

해결

또 다른 문제를 해결 JOIN :

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

해결법

  1. ==============================

    1.작동합니다 비어 사용하면 (나는 JPQL 구문을 선호하는 것) :

    작동합니다 비어 사용하면 (나는 JPQL 구문을 선호하는 것) :

    SELECT u FROM User u WHERE u.status = 1 AND u.appointments IS EMPTY
    

    그렇지 않은 경우, 생성 된 SQL을 보여주십시오.

  2. ==============================

    2.당신은 당신의 생성 된 SQL을 살펴 보셨나요? 귀하의 방법은 여기에 잘 작동합니다 :

    당신은 당신의 생성 된 SQL을 살펴 보셨나요? 귀하의 방법은 여기에 잘 작동합니다 :

    // 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
    
  3. ==============================

    3.

    // Hibernate query:
    const string hql = "from User u where u.Id = 101 and size(u.Appointments) = 0";
    
  4. from https://stackoverflow.com/questions/3760711/hql-query-to-check-if-size-of-collection-is-0-or-empty by cc-by-sa and MIT license