数時間検索しましたが、JPAを使用したPlayFrameworkの学習曲線にとらわれています。投稿できるサンプルWebサイトを構築しています。ただし、これらの投稿には次の状態があります。
これらの状態は別のテーブルに格納されます。明らかに、ドラフト状態の投稿まだ表示されていないはずです。
だから私はこれらのクラスを持っています:
私のページクラスで私は持っています:
@Column(name="POSTS_REF")
@Where(clause="PostPublished")
private List<Posts> userPosts;
しかし、これは機能していません!それで、JPQLを使用せずに発行済み状態の投稿のみをロードするために、where句をどのように指定できますか?
ありがとう!
更新:2011-10-11
テーブル:投稿カラム:-id-title-state_ref(States of the IDテーブルへの参照)-コンテンツ
テーブル:States列:-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;
PDATE 2012-02-1結局、Emtの答えは私にとってうまくいきました。
次のようなものを試してください:
@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
エンティティのステータスフィールドタイプによって異なります。
Where句は完全な条件でなければなりません-このようなものです。その状態が投稿のプロパティであると仮定します。
@Column(name="POSTS_REF")
@Where(clause="state = 'PostPublished'")
private List<Posts> userPosts;
[〜#〜]編集[〜#〜]
データモデルに基づいて-以下が機能するはずです。私はそれを使用することをお勧めしません。投稿コレクションをマップしないでください-POstsクラスからPageへの参照を持ち、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;
where
条件には、データベース列名が含まれている必要があります。
@Where(clause="state = 'PostPublished'")
ここで、state
列名はDBにあり、Hibernateマッピングにはありません。