在ObjectDB的Query中使用LocalDateTime

时间:2015-01-02 22:35:31

标签: java spring jpa objectdb

我正在使用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参数?

提前致谢

1 个答案:

答案 0 :(得分:0)

ObjectDB(和JPA)目前不支持LocalDateTime作为日期/时间类型。它仍然可以作为任何其他Serializable类型支持存储,但不支持查询。

因此,您必须使用标准的JPA日期/时间类型,并可能提供用于将值与LocalDateTime进行转换的包装方法。