3

我正在使用 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 参数的解决方案?

提前致谢

4

1 回答 1

0

ObjectDB(和 JPA)目前不支持 LocalDateTime 作为日期/时间类型。它可能仍被支持作为任何其他可序列化类型用于存储但不用于查询。

因此,您将不得不使用标准的 JPA 日期/时间类型,并可能提供包装器方法来将值与 LocalDateTime 相互转换。

于 2015-01-06T00:00:31.810 回答