I have an object with lazy-loaded Set mapped like this:
У меня есть объект с Set, который объявлен следующим образом
@OneToMany(mappedBy = "transaction", fetch = FetchType.LAZY)
@Cascade(CascadeType.ALL)
@JoinColumn(name = "transaction_id", nullable = false)
private Set<TransactionFlight> flights;
В классе TransactionFlight есть свойство startDate. Мне нужно в критерии наложить ограничение на это поле. Я попробовал такой вариант
criteria.add(Restrictions.gt("flights.startDate", dto.getStartDate()));
но это ожидаемо не работало.
Есть ли способ решить эту проблему без переписывания на HQL?
Здравствуйте, Аноним, Вы писали:
А>I have an object with lazy-loaded Set mapped like this:
А>У меня есть объект с Set, который объявлен следующим образом
А>А>@OneToMany(mappedBy = "transaction", fetch = FetchType.LAZY)
А>@Cascade(CascadeType.ALL)
А>@JoinColumn(name = "transaction_id", nullable = false)
А>private Set<TransactionFlight> flights;
А>
А>В классе TransactionFlight есть свойство startDate. Мне нужно в критерии наложить ограничение на это поле. Я попробовал такой вариант
А>А>criteria.add(Restrictions.gt("flights.startDate", dto.getStartDate()));
А>
может быть все-таки NamedQuery использовать?
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, брюн, Вы писали:
Б>>может быть все-таки NamedQuery использовать?
А>HQL и подобное использовать проблематично, так как там накладывается много ограничений, также есть Join'ы, которые не хочется писать ручками
вроде есть какието ведь способы фильтрации коллекций.. я правда не помню деталей
на крайний случай возможно критериями придется самостоятельно делать выборку этого сета (т.е. не пользоваться готовым), и уже там накладывать какие угодно ограничения
Проблема решена с помощью:
criteria = criteria.createAlias("flights", "flight");
criteria.add(Restrictions.gt("flight.startDate", dto.getStartDate()));
Здравствуйте, Аноним, Вы писали:
А>Проблема решена с помощью:
А>А>criteria = criteria.createAlias("flights", "flight");
А>criteria.add(Restrictions.gt("flight.startDate", dto.getStartDate()));
А>
Возможно такой вариант
criteria.createCriteria("flights")
.add(Restrictions.gt("startDate", dto.getStartDate()));