Как использовать @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.