2011-12-05 8 views
0

私は2つのエンティティを1つはイベント、もう1つはユーザーです。ユーザーはイベントが好きなので、好きなイベントのリスト(ジョイントテーブルに記録されています)があります。私は、JPA 2.0を使ってタイプセーフなクエリを作成して、イベントIDを与えられたイベントが何人いるかを数えたいと思っています。誰もそれで私を助けることができますか?ありがとうございました。動的なタイプセーフなクエリを作成する

以下はエンティティのコードです。

@Entity 
@Table(name = "events") 
public class Event extends BaseEntity{ 
    @Id 
    @Column(name = "event_id") 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    protected Long eventId; 

    @Column(name = "title", length = 200) 
    protected String title; 

     //getter and setter.... 
} 



@Entity 
@Table(name = "user") 
public class User{ 
    @Id 
    @Column(name = "login", length = 64) 
    protected String login; 

    @OneToMany(cascade = CascadeType.ALL) 
    @LazyCollection(LazyCollectionOption.FALSE) 
    @JoinTable(name = "user_events", 
     joinColumns = {@JoinColumn(name = "login")}, 
     inverseJoinColumns = {@JoinColumn(name = "event_id")}) 
    protected List<Event> events; 

    //getter and setters... 
} 

答えて

0

あなたのクエリは、基本的パラメータは、イベントIDであることと、静的であることを行っているので、私はentity manager to createTypedQueryを使用し、その後、@NamedQueryを作成します。カウントを探しているので、タイプはおそらくロングになります。

クエリは、IDだけでなく、select count(u) from User u where :event member of u.eventsのようなイベントを想定している可能性があります。

NamedQueryに対して何かがある場合は、Criteria APIを使用して同じことを行うことができますが、このクエリは静的であるため、それを行う際に多くの点は見当たりません。

+0

詳細を教えてください。 TypedQueryを作成するためにEntity Managerを使用する方法について話しましたが、JPQLクエリを意味しますか?しかし、タイプセーフではありません。私が望むのは、JPA 2.0が提供するCriteria APIを使用することです。 – John

+0

しかし、Criteria APIを他のコードと一貫して使用したいと思います。だから、サンプルコードを私に見せてもらえますか?ありがとう。 – John

+0

このページの下半分http://www.objectdb.com/java/jpa/query/jpql/selectでは、Criteriaクエリの作成方法について説明しています。上記のクエリ(またはそのようなクエリを作成するクエリ)を条件クエリに変換するだけで済みます。 – digitaljoel

関連する問題