Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 构建一个动态的、类型安全的查询_Hibernate_Jpa_Jpa 2.0 - Fatal编程技术网

Hibernate 构建一个动态的、类型安全的查询

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

我有两个实体,一个是事件,另一个是用户。用户可以喜欢事件,因此它有一个喜欢的事件列表(记录在联合表中)。我想使用JPA2.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...
}
@实体
@表(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与我的其他代码保持一致。你能给我看一个示例代码吗?谢谢。本页下半部分将介绍如何创建条件查询。您只需将我上面给出的查询(或您喜欢的查询)转换为条件查询。谢谢您的帮助。我将您给我的查询转换为条件查询。