1

この 2 つのエンティティが与えられた場合:

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>')
4

1 に答える 1

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 されたサブクエリとして追加する必要があります。

于 2013-01-16T23:30:21.410 に答える