2015-01-02 5 views
3

Я создаю приложение Spring MVC с помощью ObjectDB. Моя цель - использовать Java 8 Date and Time в качестве параметра запроса для сравнения в предложении where.Использование LocalDateTime в запросе на ObjectDB

Давайте предположим, что я получил следующий субъект, имеющий измерения даты и времени объекта:

@Entity 
public class MyEntity { 
    @Id @GeneratedValue 
    private long id; 

    @Type(type = "org.jadira.usertype.dateandtime.threeten.PersistentLocalDateTime") 
    private LocalDateTime dateTime; 

    //other properties, constructors, getter... 
} 

И следующий репозиторий:

public interface EntityRepository extends CrudRepository<MyEntity, Long> { 
    @Query("SELECT e FROM MyEntity e WHERE e.dateTime BETWEEN ?1 AND ?2") 
    Iterable<MyEntity> findByTimeSpan(LocalDateTime start, LocalDateTime end); 

    Iterable<MyEntity> findAll(); 
} 

Теперь, если я призываю findByTimeSpan на моем хранилище я получаю пустой итерация. Вызов findAll() вместо этого дает мне все сущности в базе данных (включая их правильную дату DateTime).

Я знаю, что это вызвано отсутствием нового API времени в JPA. Но поскольку я ранее использовал HSQLDB с Hibernate в качестве слоя сохранения (пришлось переключиться из-за проблем с производительностью), я знаю, что это возможно даже без поддержки JPA.

Есть ли какое-либо обходное решение, известное этой проблемой?

Моих идей где:

-Write обертки с аннотацией @Entity для каждого используемого класса от времени API, включая их свойства и делегирование к оригинальным методам

-persist java.util.Date (или, возможно, java.sql.Timestamp) и использовать геттер для использования в качестве LocalDateTime в коде

Но моя проблема (дополнительно к усилиям) - эффективность. Когда программное обеспечение переходит в продуктивное использование, база данных должна хранить более миллиона объектов класса MyEntity (с растущим числом), а не говорить о других классах.

У кого-нибудь есть решение для использования LocalDateTime в качестве параметра WHERE в ObjectDB?

Заранее спасибо

ответ

0

LocalDateTime в настоящее время не поддерживается ObjectDB (и JPA) в качестве типа даты/времени. Он все равно может поддерживаться как любой другой Serializable тип для хранения, но не для запросов.

Соответственно вам придется использовать стандартный тип даты/времени JPA и, возможно, предоставить методы-обертки для преобразования значений в LocalDateTime и из него.

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