Как использовать @Where в спящем режиме
Поиск в течение нескольких часов, но я застрял в моей кривой обучения для PlayFramework с JPA. Я создаю образец веб-сайта, на котором можно создавать сообщения. Но эти сообщения могут иметь состояния:
- PostDraft (сообщение - черновик, не публикуется)
- PostPublished (публикация может быть опубликована)
Эти состояния хранятся в отдельной таблице. Очевидно, что проекты государственных сообщений еще не должны быть видны.
Итак, у меня есть следующие классы:
- Класс страницы (получение информации о странице из таблицы, 1 страница может содержать несколько сообщений)
- Класс сообщений (сообщения могут быть в черновике и опубликованы)
В моем классе страницы у меня есть:
@Column(name="POSTS_REF")
@Where(clause="PostPublished")
private List<Posts> userPosts;
Но это не работает! Итак, как я могу указать предложение where, загружать только сообщения, находящиеся в опубликованном состоянии, без использования JPQL?
Спасибо!
ОБНОВЛЕНИЕ: 2011-10-11
Таблица: Сообщения с колонками:
- Я бы
- заглавие
- state_ref (ссылка на таблицу ID государств)
- содержание
Таблица: Состояния с столбцами:
- Я бы
- statename
Итак, я хочу сказать что-то вроде:
select *
from posts inner join states on posts.state_ref = states.id
where states.statename = 'PostPublished'
ОБНОВЛЕНИЕ 2011-10-13
Это моя текущая модификация в моем классе страницы: но она тоже не работает.
/** link to the states */
@JoinColumn(name = "STATES_REF")
@OneToOne
@Where(clause = "states.statename = 'PostPublished'")
public MyState state;
ОБНОВЛЕНИЕ 2012-02-13
Ответ Emt работал у меня в конце концов.
Ответы
Ответ 1
Попробуйте что-то вроде:
@Column(name="POSTS_REF")
@Where(clause="state='PostPublished'")
private List<Posts> userPosts;
или
@Column(name="POSTS_REF")
@Where(clause="PostPublished=true")
private List<Posts> userPosts;
в зависимости от типа поля состояния на вашем объекте Post
.
Ответ 2
Предложение where должно быть полным условием - что-то вроде этого. Предполагая, что это состояние является собственностью на этом посту.
@Column(name="POSTS_REF")
@Where(clause="state = 'PostPublished'")
private List<Posts> userPosts;
ИЗМЕНИТЬ
На основе модели данных должно работать следующее. Я бы не рекомендовал его использовать. Не сопоставляйте коллекцию сообщений - просто используйте ссылку на страницу из класса POsts, добавьте метод в DAO для извлечения опубликованных сообщений для страницы с помощью запроса HQL или критериев.
@Column(name="POSTS_REF")
@Where(clause="exists (select id from states where state_ref = states.id and states.statename = 'PostPublished')")
private List<Posts> userPosts;
Ответ 3
Условие where
должно содержать имя столбца базы данных:
@Where(clause="state = 'PostPublished'")
Здесь имя столбца state
находится в БД, а не в отображении Hibernate.