2013-02-22 1 views
0

그래서 Play Framework (1.2.5)를 사용하여 응용 프로그램을 개발하고 있습니다. 하지만 특정 데이터를 검색하는 데 약간의 문제가 있습니다.Joda 간격이 포함 된 JPA 쿼리

두 가지 클래스가 있습니다 : 이벤트와 사이트. 이벤트는 일정 기간 (Joda 간격으로 정의 됨)에 발생하며 여러 사이트를 포함합니다. 각 사이트에는 위치 (위도와 경도로 정의 됨)가 있습니다. 내가하고 싶은 일은 일정 기간 동안 (그리고 아마도지도 경계 내에서) 이벤트에 참여하는 사이트 목록을 얻는 것입니다.

정확하게이 쿼리를 수행하는 방법은 무엇입니까? 나는 JPA의 CriteriaBuilder를 사용해 보았고 쿼리 자체를 작성하기도했지만 시간주기를 다루는 방법에 대해서는 단서가 없습니다. 감사합니다

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) 
); 

DB

에 테이블을 만드는 데 사용

이벤트 모델

@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; 
} 

SQL!

답변

0

영구적 간격은 두 가지 특성을 추가합니다. 쿼리 중에 액세스 할 수있는 변수에 '시작'및 '종료'합니다. 귀하의 경우 예를 들어 당신은 그들이 자바 문서에 언급 된

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

를 원하는 것입니다하지만 난 그들을 사용하는 방법을 작동하도록 코드를 읽을 수 있었다 발견했다. http://joda-time.sourceforge.net/contrib/hibernate/apidocs/org/joda/time/contrib/hibernate/PersistentInterval.html