Гибернация: группировка по критериям
У меня есть следующие объекты в моей базе данных:
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
запись.