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