我有两个实体,一个是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...
}
答案 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来做同样的事情,但是这个查询是如此静态的我没有看到这么做的重点。