鉴于这两个实体:
post post_category
- id - post_id
- title - name
- text
我想使用jpa条件查询进行此查询:
select * from post
where post.id in (
select post_id from post_category
where name = '<category1>' and name = '<category2>' ... and name = '<categoryN>')
答案 0 :(得分:0)
查看您的查询草图我认为它不会返回任何结果。我改为将其改为name in ('<category1>','<category2>', ...)
。这可能与您的情况不符。
这假设您已在类上正确设置了映射,以便JPA正常工作。例如
class PostCategory {
private String name;
private Post post;
...
@ManyToOne
public Post getPost() {
return post;
}
...
在这种情况下,您的DAO代码将类似于此(给定List nameValues对象)
// Set up the subquery
DetachedCriteria dc = DetachedCriteria.forClass(PostCategory.class)
.setProjection(Projections.property("post.id"))
.add(Restrictions.in("name", nameValues));
Criteria crit = session.createCriteria(Post.class)
.add(Subqueries.eqProperty("id", dc));
但是如果你想要一个包含所有类别的Post对象列表,那么你需要为每个类别创建一个单独的DetachedCriteria实例,并将每个实例添加为AND'ed子查询。