Hibernate 构建一个动态的、类型安全的查询
我有两个实体,一个是事件,另一个是用户。用户可以喜欢事件,因此它有一个喜欢的事件列表(记录在联合表中)。我想使用JPA2.0构建一个类型安全查询,以计算有多少人喜欢给定事件id的事件。有人能帮我吗?多谢各位 以下是实体的代码Hibernate 构建一个动态的、类型安全的查询,hibernate,jpa,jpa-2.0,Hibernate,Jpa,Jpa 2.0,我有两个实体,一个是事件,另一个是用户。用户可以喜欢事件,因此它有一个喜欢的事件列表(记录在联合表中)。我想使用JPA2.0构建一个类型安全查询,以计算有多少人喜欢给定事件id的事件。有人能帮我吗?多谢各位 以下是实体的代码 @Entity @Table(name = "events") public class Event extends BaseEntity{ @Id @Column(name = "event_id") @GeneratedValue(strateg
@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...
}
@实体
@表(name=“events”)
公共类事件扩展BaseEntity{
@身份证
@列(name=“event\u id”)
@GeneratedValue(策略=GenerationType.IDENTITY)
受保护的长事件ID;
@列(name=“title”,长度=200)
受保护的字符串标题;
//盖特和塞特。。。。
}
@实体
@表(name=“user”)
公共类用户{
@身份证
@列(name=“login”,长度=64)
受保护的字符串登录;
@OneToMany(级联=级联类型.ALL)
@LazyCollection(LazyCollectionOption.FALSE)
@JoinTable(name=“user\u事件”,
joinColumns={@JoinColumn(name=“login”)},
inverseJoinColumns={@JoinColumn(name=“event_id”)})
受保护列表事件;
//盖特和塞特。。。
}
由于查询基本上是静态的,参数是事件id,因此我将创建一个,然后使用一个。由于您正在查找计数,因此类型可能是长的
该查询可能类似于从用户u中选择count(u),其中:u.events的event member
假设您拥有事件,而不仅仅是id
如果您对NamedQuery有异议,您可以使用Criteria API来执行相同的操作,但是如果此查询是静态的,我认为这样做没有多大意义。您能提供更多详细信息吗?您谈到了使用实体管理器创建TypedQuery,您是指JPQL查询吗?但它不是类型安全的。我想要的是使用JPA2.0提供的CriteriaAPI,但我确实希望使用CriteriaAPI与我的其他代码保持一致。你能给我看一个示例代码吗?谢谢。本页下半部分将介绍如何创建条件查询。您只需将我上面给出的查询(或您喜欢的查询)转换为条件查询。谢谢您的帮助。我将您给我的查询转换为条件查询。