当前位置: 首页 > 知识库问答 >
问题:

在ObjectDB的查询中使用LocalDateTime

秦信瑞
2023-03-14

我正在使用ObjectDB构建一个Spring MVC应用程序。我的目标是使用Java8 Date and Time作为在where子句中进行比较的查询参数。

假设有以下实体具有度量datetime对象

@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注释的包装器,包括它们的属性并委托给原始方法

-持久化java。util。Date(或者java.sql.Timestamp),并在代码中使用getter作为LocalDateTime

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

那么,有没有人有办法在ObjectDB中使用LocalDateTime作为WHERE参数呢?

提前感谢

共有1个答案

陈兴朝
2023-03-14

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

因此,您必须使用标准的JPA日期/时间类型,并可能提供包装器方法来将值转换为LocalDateTime和从LocalDateTime转换值。

 类似资料:
  • pm.detachcopy正在工作? 我正在制作一个spring+ObjectDB(JDO)程序。 PersistenceManager#DetachCopy返回一个瞬态对象,尽管@PersistenceCapable:Detachable为true。 下面是一个示例代码。 我有一个简单的测试模型(POJO) 可分离的设置为“true”。 而dao是 我认为我在(2)处有一种超然的状态。但只是暂时

  • ObjectDB 是个功能强大的Java对象数据库,具有简单、快速、可靠和易用等特点。支持从KB到GB的数量级,可以用来嵌入到各种 Java 应用中。兼容 JDO 规范。

  • 我有一个API调用,它需要从MySQL数据库中提取一些信息,以便完成请求。问题是,NodeJS不会等待查询响应,我已经尝试用承诺来解决这个问题。下面是我的代码: 这个函数将返回Promise对象,这将触发SQL语法错误,因为这不是预期的数据库输入。我做错了什么?任何建议都非常感谢。

  • 您可以看到,子查询中没有使用协议实体路径a1的别名,而是被协议实体路径A2的别名所取代。在querydsl中还需要做一些其他的事情才能生成这个查询吗?

  • 我希望通过登录搜索员工列表,并使用扩展的DAO接口: 在我的服务层中,我用

  • 样本子句 sample_clause允许您指示数据库从表中的随机数据样本中进行选择,而不是从整个表中进行选择。 我想使用QueryDSL运行下面的查询 样本子句 sample_clause允许您指示数据库从表中的随机数据样本中进行选择,而不是从整个表中进行选择。 从测试t样本(80)中选择,其中t.test_id=01,t.test _ suite _ id = 02 其中条件是动态的,我使用qu