gpt4 book ai didi

java - 在 ObjectDB 查询中使用 LocalDateTime

转载 作者:行者123 更新时间:2023-12-02 03:06:10 24 4
gpt4 key购买 nike

我正在使用 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 的支持也是可能的。

是否有针对此问题的已知解决方法?

我的想法:

-为 Time API 中的每个使用的类编写一个用 @Entity 注释的包装器,包括它们的属性并委托(delegate)给原始方法

-坚持java.util.Date(或者可能是java.sql.Timestamp)并使用getter在代码中用作LocalDateTime

但我的问题是(除了努力之外)效率。当软件投入生产使用时,数据库必须存储超过一百万个 MyEntity 类的实体(数量还在不断增加),更不用说其他类了。

那么有人有在 ObjectDB 中使用 LocalDateTime 作为 WHERE 参数的解决方案吗?

提前致谢

最佳答案

ObjectDB(和 JPA)当前不支持 LocalDateTime 作为日期/时间类型。它可能仍然像任何其他可序列化类型一样受到支持,用于存储,但不用于查询。

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

关于java - 在 ObjectDB 查询中使用 LocalDateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27749430/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com