У меня есть класс UserBean ява сущности со списком событий:JPQL запрос с WHERE на вложенных полях
@OneToMany
private List<EventBean> events;
EventBean имеет Дата переменную:
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Date eventDate;
Сейчас в UserBean я хочу, чтобы создать NamedQuery, который возвращает все даты, которые относятся к определенному диапазону:
@NamedQuery(name="User.findEventsWithinDates",
query="SELECT u.events FROM UserBean u WHERE u.name = :name AND u.events.eventDate > :startDate AND u.events.eventDate < :endDate")
Вышеприведенный запрос не компилируется, хотя , Я получаю эту ошибку:
The state field path 'u.events.eventDate' cannot be resolved to a valid type.
Кстати, я использую EclipseLink версии 2.5.0.v20130507-3faac2b.
Что можно сделать, чтобы выполнить этот запрос? Благодарю.
Спасибо, что работает! Я только хочу выбрать s пользователя с определенным именем. Поэтому я подумал, что если я добавлю «WHERE u.name =: name», прежде чем оператор JOIN сделает именно это. Я получаю эту ошибку: Выражение не является допустимым условным выражением. Что было бы условным условным выражением для выбора пользователя по имени? – user473453
Добавлено: имя для ответа. Такое условие относится к существующему предложению WHERE - дополнительные предложения WHERE перед операцией JOIN невозможны. –
Yay, это сделал. Окончательный запрос: SELECT DISTINCT u.events ИЗ UserBean у РЕГИСТРИРУЙТЕСЬ u.events е WHERE u.name =: имя И e.eventDate>: STARTDATE И e.eventDate <: ENDDATE Спасибо большое за помощь , Я довольно новичок в JPA, это самый эффективный способ получить нужные мне данные из базы данных? Похоже, что запрос выполняется медленно, но причиной этого может быть медленное подключение к Интернету. – user473453