所以我使用 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)
);
谢谢!