搜索了几个小时,但我陷入了PlayAramework与JPA的学习曲线。我正在建立一个可以发布帖子的示例网站。但这些帖子可以有各州:
这些状态存储在单独的表中。显然,国家职位草案尚不可见。
所以我有这些课程:
在我的页面课程中,我有:
@Column(name="POSTS_REF")
@Where(clause="PostPublished")
private List<Posts> userPosts;
但这不起作用!那么,如何指定where子句,只加载处于已发布状态的帖子而不使用JPQL?
谢谢!
更新时间:2011-10-11
表:帖子包含列: - ID - 标题 - state_ref(引用States表的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;
更新2012-02-13 毕竟,Emt的回答对我有用。
答案 0 :(得分:15)
尝试类似:
@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
实体的状态字段类型。
答案 1 :(得分:2)
where子句必须是完整的条件 - 就像这样。假设该州是该职位的财产。
@Column(name="POSTS_REF")
@Where(clause="state = 'PostPublished'")
private List<Posts> userPosts;
修改强>
基于数据模型 - 以下内容应该有效。我不建议使用它。不要映射posts集合 - 只需从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;
答案 2 :(得分:0)
where
条件必须包含数据库列名:
@Where(clause="state = 'PostPublished'")
此处state
列名在DB中,而不在Hibernate映射中。