Гибернация: группировка по критериям - PullRequest
0 голосов
/ 05 июня 2018

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

  • Ticket
  • TicketEntry

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

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

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

1 Ответ

0 голосов
/ 05 июня 2018

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

@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 запись.

...