Я создаю приложение 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?
Заранее спасибо