搜索了几个小时,但我陷入了 PlayFramework 与 JPA 的学习曲线。我正在建立一个可以发帖的示例网站。但这些帖子可以有这样的状态:
这些状态存储在单独的表中。显然,草案状态帖子 应该还看不到。
所以我有这些课程:
在我的页面类中,我有:
@Column(name="POSTS_REF")
@Where(clause="PostPublished")
private List<Posts> userPosts;
但这不起作用!那么,我如何指定一个 where 子句,只加载处于已发布状态的帖子而不使用 JPQL?
谢谢!
更新:2011-10-11
表:帖子,含列: - ID - 标题 - state_ref(引用States表的ID) - 内容
表:状态,包含列: - ID - 州名
所以我想说的是:
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 的回答毕竟对我有用。
尝试类似:
@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
列名位于数据库中,而不是在 Hibernate 映射中。
这对我有用。这是在 StudentInfo.java 上
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "studentInfo")
@Where(clause = "active_ind = 'Y'")
private Set<Courses> courses = new HashSet<>();
“active_ind”是课程表中的列,它不是 Course.java 类中的属性名称。表格是 学生信息:
- 学生id
- 学生姓名
- 等等..
课程:
- 课程_id
- 课程名称
- student_id(外键)
- active_ind
- 等等..