Mysql 涉及Joda区间的JPA查询

Mysql 涉及Joda区间的JPA查询,mysql,jpa,find,criteria,Mysql,Jpa,Find,Criteria,所以我使用Play框架(1.2.5)来开发一个应用程序。但我在检索某些特定数据时遇到了一些问题 我有两个类:事件和站点。事件发生在一个时间段(定义为Joda间隔)内,包含多个站点。每个现场都有一个位置(用lat和lng定义)。我想做的是得到一个在特定时间段内(可能在地图边界内)参与事件的站点列表 我该如何做这个查询呢?我尝试过使用JPA的CriteriaBuilder,甚至自己编写查询,但我对如何处理时间段一无所知 事件模型 @Entity @Table(name = "event") publ

所以我使用Play框架(1.2.5)来开发一个应用程序。但我在检索某些特定数据时遇到了一些问题

我有两个类:事件和站点。事件发生在一个时间段(定义为Joda间隔)内,包含多个站点。每个现场都有一个位置(用lat和lng定义)。我想做的是得到一个在特定时间段内(可能在地图边界内)参与事件的站点列表

我该如何做这个查询呢?我尝试过使用JPA的CriteriaBuilder,甚至自己编写查询,但我对如何处理时间段一无所知

事件模型

@Entity
@Table(name = "event")
public class Event extends GenericModel {
    @Id
    @GeneratedValue
    public Long id;
    @Columns(columns = {
        @Column(name = "start"),
        @Column(name = "end")})
    @Type(type = "org.joda.time.contrib.hibernate.PersistentInterval")
    public Interval eventPeriod;
    public String title;
    @ManyToMany
    public List<Site> sites = new ArrayList<Site>();
}
用于在数据库中创建表的SQL

CREATE  TABLE event (
    id BIGINT(20) NOT NULL AUTO_INCREMENT ,
    start DATETIME NOT NULL ,
    end DATETIME NOT NULL ,
    title VARCHAR(255) NOT NULL ,
    PRIMARY KEY (id)
);

CREATE  TABLE site (
    id BIGINT(20) NOT NULL AUTO_INCREMENT ,
    akey VARCHAR(255) NOT NULL ,
    latitude DOUBLE NOT NULL ,
    longitude DOUBLE NOT NULL ,
    PRIMARY KEY (id) ,
);

CREATE  TABLE event_site (
    event_id BIGINT(20) NOT NULL,
    sites_id BIGINT(20) NOT NULL,
    KEY FKevent_id (event_id),
    KEY FKsites_id (sites_id)
);

谢谢

持久间隔添加了两个属性;'“开始”和“结束”到您可以在查询期间访问的变量。作为你的例子,你会想要

from Event
where :targetDate between eventPeriod.start and evenPeriod.end
java文档中提到了它们,但我发现我必须阅读代码才能了解如何使用它们。

from Event
where :targetDate between eventPeriod.start and evenPeriod.end