构建动态的,类型安全的查询

时间:2011-12-05 19:43:13

标签: hibernate jpa jpa-2.0

我有两个实体,一个是Event,另一个是User。用户可以喜欢事件,因此它有一个喜欢的事件列表(记录在一个联合表中)。我想使用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...
}

1 个答案:

答案 0 :(得分:0)

由于您的查询基本上是静态的,参数是事件ID,我会创建@NamedQuery,然后使用entity manager to create a TypedQuery。由于您正在寻找计数,因此类型可能会很长。

查询可能类似于select count(u) from User u where :event member of u.events,假设您有事件,而不仅仅是id。

如果你有一些针对NamedQuery的东西,你可以使用Criteria API来做同样的事情,但是这个查询是如此静态的我没有看到这么做的重点。