我正在使用 ObjectDB 构建一个 Spring MVC 应用程序。我的目标是使用 Java 8 日期和时间作为查询参数,以便在 where 子句中进行比较。
假设我有以下具有测量日期时间对象的实体:
@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()
会给我数据库中的所有实体(包括它们的正确日期时间)。
我知道这是由于 JPA 中不存在新的 Time API 造成的。但是由于我之前使用 HSQLDB 和 Hibernate 作为持久层(由于性能问题不得不切换),我知道即使没有 JPA 的支持也是可能的。
此问题是否有任何已知的解决方法?
我的想法在哪里:
@Entity
-为 Time API 中的每个使用的类编写一个带有注释的包装器,包括它们的属性并委托给原始方法
-persist java.util.Date(或者可能是 java.sql.Timestamp)并在代码中使用 getter 作为 LocalDateTime
但我的问题是(除了努力)效率。当软件投入生产使用时,数据库必须存储超过一百万个 MyEntity 类的实体(数量不断增加),更不用说其他类了。
那么有没有人有使用 LocalDateTime 作为 ObjectDB 中的 WHERE 参数的解决方案?
提前致谢