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

如何在jpa本机查询中转换joda DateTime

曹伟泽
2023-03-14

我有一个用hibernate持久化的带有DateTime属性的实体

@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime")
@Column(name = "EFF_DT")
protected DateTime effDt;

对于常规的spring-data-jpa生成的查询来说,这一切都很好。

我正在尝试添加自定义本机查询

 @Query(value = "SELECT COUNT(*) FROM wsa_circuit_state_history ch WHERE ch.eff_dt between ?1 and ?2", nativeQuery = true)
    Integer countEffDateBetween(DateTime start, DateTime end);

我得到的错误是当试图调用这个是

 java.sql.SQLException: ORA-00932: inconsistent datatypes: expected DATE got BINARY

这与我在将自定义类型映射添加到实体之前使用常规spring-data Finder时得到的错误相同

 @Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime")

如何使spring-data-jpa/hibernate使用参数到本机查询的自定义类型映射?

共有1个答案

荀振国
2023-03-14

我也得到了同样的要求,我通过将自定义类型注册到hibernate配置来解决这个问题。

对于本机查询,TypeDefs不足以让hibernate查找用户类型,它需要类型解析器来查找其类型。

@Query(value = "SELECT COUNT(*) FROM wsa_circuit_state_history ch WHERE ch.eff_dt between ?1 and ?2", nativeQuery = true)
    Integer countEffDateBetween(DateTime start, DateTime end);

在本例中,hibernate尝试从类型解析器中猜测类型(org.joda.time.DateTime)。

Type type = session.getFactory().getTypeResolver().heuristicType(typename);
configuration.registerTypeOverride(new org.jadira.usertype.dateandtime.joda.PersistentDateTime(), new String[]{"org.joda.time.DateTime"});
 类似资料:
  • 当我按下搜索按钮时,出现以下错误: 发生错误: 异常[EclipseLink-4002](Eclipse持久性服务-2.3.2.v20111125-r10461):org。日食坚持不懈例外。DatabaseException内部异常:java。sql。SQLException:索引处缺少IN或OUT参数::1错误代码:17041调用:从CRM_DAILY_SHEET WHERE to_char(报

  • 问题内容: 我有一个延伸的对象。默认情况下,两个对象都在我的Derby数据库的表中(来自的包含字段)。通常我会选择一个这样的: 但是由于查询的复杂性,我使用的是本机查询,如下所示: 尽管这会引发强制转换异常。我认为这是由于中的任何字段造成的。 我的问题是,我如何选择一个使用本机查询的结果与第一个示例相同的结果(包括与JPQL查询将返回的和(等)相同的值)? 问题答案: 您可能想尝试以下方法之一:

  • 是否可以将像这样的JPQL sting转换为对象,在该对象中我可以检查查询的根是否为(使用),或者以不同的方式执行相同的操作(不转换为)? JPA文档非常简单(例如,的类注释说“返回一个CriteriaBuilder的实例以创建CriteriaQuery对象。”-10或20个句子和更多的引用也无妨)。因此,它没有提到任何关于反转进程的内容。 将jpql连接查询转换为条件api以及如何将带有子查询的

  • 我有一个服务类,它通过使用< code > carrepository . retrieve cars()调用JPA存储库来接收汽车列表。存储库方法使用本地查询来检索记录。 现在我想传递参数< code > carrepository . retrieve cars(Long vinNo,Long serialNo)并在查询中使用它们。我假设我会需要一些东西作为准备好的陈述。然而,我不知道如何实现

  • 我试图将以下查询转换为本机查询,当查询返回2个元组时,我得到了空列表 以下是查询: 下面是我创建的方法,它返回空列表,而它应该发送一个包含两个对象的列表(这是m repository的方法)

  • 当使用jpa本机查询 事务传播是我们正在使用的正确jpa的唯一特性吗? 在我的意见中,我就像使用普通的旧jdbc pluc jpa事务传播 我正在阅读PRO JPA一书,根据我的理解 当我们使用JPA本机查询获取一组标量值时(与我们使用jdbc的方式很相似),实际上没有托管实体和持久性上下文的概念。当我们通过本机查询检索实体时,情况会发生变化。