2012-06-04 2 views
0

Я не получаю фильтр даты с помощью JPA.Фильтрация по дате (без учета времени суток)

Например мои данные таблицы базы данных используют этот формат даты:

id=22001  2012-05-24 01:18:44.459000 -3.72562176  -38.55413138 
id=22002  2012-05-24 01:19:58.369000 -3.72556951  -38.55412081 
id=22003  2012-05-24 01:20:11.509000 -3.72554203  -38.5541338 
id=22004  2012-05-24 01:20:43.832000 -3.72556247  -38.55411875 
id=22005  2012-05-27 21:31:31.179000 -3.73500586  -38.5359234 
id=22006  2012-05-28 22:41:21.072000 -3.76651343  -38.49477246 
id=22007  2012-05-28 22:44:37.100000 -3.76582333  -38.49650576 
id=22008  2012-05-28 22:46:47.878000 -3.76732246  -38.49688336 
id=22009  2012-05-28 22:48:11.118000 -3.76437084  -38.50487202 
id=22010  2012-05-28 22:48:30.419000 -3.76383159  -38.50810391 
id=22011  2012-05-28 22:50:21.972000 -3.76130886  -38.50585614 
id=22012  2012-05-28 22:51:56.787000 -3.75217442  -38.50331619 
id=22013  2012-05-28 22:52:59.405000 -3.7531888 -38.50264043 
id=22014  2012-05-28 22:53:48.185000 -3.75311701  -38.50296631 
id=22015  2012-05-28 22:54:53.602000 -3.75311704  -38.5029654 

Это мой код, фильтровать строки:

public List<GeoLocation> getAll(Date date) { 

    javax.persistence.Query q = entityManager 
     .createQuery("SELECT g FROM GeoLocation g where g.criationDate = :data");  
    q.setParameter("data", date,TemporalType.DATE); 


    @SuppressWarnings("unchecked") 
    List<GeoLocation> result = q.getResultList(); 

    return result; 
} 

Это моя сущность. Поле даты имеет TemporalTime аннотации

package br.com.drover.entity; 
import java.util.Date; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.Temporal; 
import javax.persistence.TemporalType; 

@Entity 
public class GeoLocation { 

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private Long id; 

@Column(nullable=false) 
private Double latitude; 

@Column(nullable=false) 
private Double longitude; 

@Column(nullable=false) 
@Temporal(TemporalType.DATE) 
private Date creationDate; 


//..Some getters and setters 

}

+0

"g.criationDate" опечатка? Вы имели в виду 'creationDate'? – finnw

+0

Да, имя поля criationDate :) – reuber

ответ

1

Предполагая, что это будет общий запрос, подход, который я использовал бы можно было бы добавить вторую «дату партии только» колонна, может быть TemporalType.DATE с отключенным временем суток. Это позволяет вам делать точный фильтр, который позволит получить хорошую производительность запросов из хранилища данных за счет дополнительной пары индексов при добавлении данных.

+0

Я добавил аннотацию, но не работал. Код не получил строки. – reuber

+0

Аннотация? Вы имеете в виду дополнительное поле в сущности? Покажите нам больше кода. –

+0

Даже если я помещаю аннотацию, когда я вставляю свой объект в BigData, формат createDate YYYY-MM-DD HH: MM: SS. Это ничего не вернет. :( – reuber

Смежные вопросы