Гибернация: группировка по критериям

У меня есть следующие объекты в моей базе данных:

  • Ticket
  • TicketEntry

каждый TicketEntry ссылки на Ticket и 1 Ticket имеет 0 или более записей билетов. Я пытаюсь выяснить, как я могу получить все билеты, которые имеют 1 TicketEntry, Я собрал SQL-скрипт, но я не знаю, как я могу преобразовать это в Hibernate Criteria Restrictions.

SELECT ticket_id FROM ticket_entries
GROUP BY ticket_id
HAVING count(ticket_id) = 1;

заранее спасибо

1 ответ

Решение

Исходя из вашего поста, я предполагаю, что ваша модель сущности похожа на следующую

@Entity
public class Ticket {
  /* other attributes */

  @OneToMany(mappedBy = "ticket")
  private List<TicketEntry> entries;
}

@Entity
public class TicketEntry {
  /* other attributes */

  @ManyToOne
  private Ticket ticket;
}

Если вы хотите использовать Hibernate Criteria API, вы должны сделать это, используя:

Restrictions.sizeEq( "entries", 1 )

Вы можете сделать это с Hibernate HQL следующим образом

SELECT t FROM Ticket t WHERE size(t.entries) = 1

Специальный size() Функция в HQL проверяет размер коллекции.

В обоих случаях предполагается, что корень запроса, который sizeEq а также size() применяются к родителю Ticket чтобы удовлетворить все что вы хотите Ticket которые имеют только 1 запись.

Другие вопросы по тегам