【问题标题】:Named native query mapping in orm.xmlorm.xml 中的命名本机查询映射
【发布时间】:2021-06-13 10:19:00
【问题描述】:

我对 Hibernate 很陌生。我正在尝试将基本 SQL 查询外部化为 orm.xml

我的查询

SELECT CURRENT_TIMESTAMP  FROM DUAL

我尝试了以下方法:

<named-native-query 
    name="JobTrackerEntity.getCurrentTimestamp"
    result-class="java.sql.Timestamp">
    <query>
        SELECT CURRENT_TIMESTAMP  FROM DUAL
    </query>
</named-native-query>

但我收到以下错误:

org.hibernate.MappingException: Unknown entity: java.sql.Timestamp

请告诉我如何在 orm.xml 中编写查询。另外,如果我可以参考任何资源以更好地理解。


更新:

我在repository接口中添加了一个方法如下:

@Repository
public interface TrackerRepository extends JpaRepository<TrackerEntity, TrackerId> {

    @Query(nativeQuery=true)
    Timestamp getCurrentTimestamp();
}

我正在调用getCurrentTimestamp() 执行查询。

【问题讨论】:

  • 如何执行查询?请显示一些代码

标签: spring-boot hibernate hibernate-mapping


【解决方案1】:

您必须删除result-class="java.sql.Timestamp",因为结果类属性必须是实体。

编辑:

CURRENT_TIMESTAMP 导致 Hibernate 方言中缺少映射。您必须提供自己的方言,或者如果您不需要您最好使用的时区:

SELECT LOCALTIMESTAMP FROM DUAL

【讨论】:

  • org.springframework.orm.jpa.JpaSystemException: No Dialect mapping for JDBC type: 2014; nested exception is org.hibernate.MappingException: No Dialect mapping for JDBC type: 2014 :如果我删除result-class="java.sql.Timestamp,这是我得到的异常
  • 您正在使用 Oracle DB?
  • 内存 H2 数据库。
  • 问题是2014类型(TimestampWithTimezone)没有用Hibernate的H2Dialect注册。我会看到我找到一些东西
  • 我更新了我的答案。你真的需要时区吗?
猜你喜欢
  • 2014-08-26
  • 2014-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-05
  • 2011-01-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多