0

所以我使用 Play Framework (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>();
}

场地模型

@Entity
@Table(name = "site")
public class Site extends Model {
    @Column(name = "akey", unique = true, nullable = false)
    public String key;
    public Double latitude;
    public Double longitude;
}

用于在 DB 中创建表的 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)
);

谢谢!

4

1 回答 1

0

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

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

它们在 java 文档中被提及,但我发现我必须阅读代码才能弄清楚如何使用它们。 http://joda-time.sourceforge.net/contrib/hibernate/apidocs/org/joda/time/contrib/hibernate/PersistentInterval.html

于 2013-05-23T05:47:01.120 回答