我正在使用ObjectDB构建Spring MVC应用程序。我的目标是使用Java 8 Date和Time作为查询参数,以便在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()
代替了我数据库中的所有实体(包括正确的dateTime)。
我知道这是由JPA中新的Time API不存在引起的。但由于我之前使用HSQLDB和Hibernate作为持久层(由于性能问题而不得不切换),我知道即使没有JPA支持也可以。
此问题是否有任何解决方法?
我的想法在哪里:
- 为Time API中的每个使用的类编写一个用@Entity
注释的包装器,包括它们的属性并委托给原始方法
-persist java.util.Date(或者java.sql.Timestamp)并使用getter作为Code中的LocalDateTime用作
但我的问题是(除了努力之外)效率。当软件投入生产使用时,数据库必须存储超过一百万个MyEntity类实体(数量不断增加),而不是其他类。
是否有人在ObjectDB中使用LocalDateTime作为WHERE参数?
提前致谢
答案 0 :(得分:0)
ObjectDB(和JPA)目前不支持LocalDateTime作为日期/时间类型。它仍然可以作为任何其他Serializable类型支持存储,但不支持查询。
因此,您必须使用标准的JPA日期/时间类型,并可能提供用于将值与LocalDateTime进行转换的包装方法。