将 postgresql 查询工作到本机休眠查询 PSQLException 语法错误
Working postgresql query to native hibernate query PSQLException syntax error
我有下面的 postgresql 查询,如果直接在 db 上使用它可以正常工作:
select memory_inmb from app where dt=(select dt from app where org='AAAA'
AND to_timestamp(dt/1000) >= date_trunc('month', '2021-07-01 06:07:07+00'::timestamp)
AND to_timestamp(dt/1000) < date_trunc('month', '2021-08-01 06:07:07+00'::timestamp)
limit 1) AND org='AAAA';
在我的存储库中,我将其编写为原生查询,如下所示:
@Query(value="select a.memory_inmb from app a where a.dt=(select a.dt from app a where a.org='AAAA' AND to_timestamp(a.dt/1000) >= date_trunc('month', '2021-07-01 06:07:07+00'::timestamp) AND to_timestamp(a.dt/1000) < date_trunc('month', '2021-08-01 06:07:07+00'::timestamp) limit 1) AND a.org='AAAA'", nativeQuery = true)
List<BigInteger> findMemory();
在我的实现中 class 现在我只调用 return this.appRepository.findMemory();
这给了我以下语法异常:
org.postgresql.util.PSQLException: ERROR: syntax error at or near ":"
Position: 148
为什么我可以 运行 直接在数据库上查询就好了,但是将其用作本机查询却不起作用?
冒号需要转义,所以 JPA 的 ::
应该变成 \:\:
,如此处解释:
(对于 JPA :
表示命名参数)
在您的情况下,您还可以将 ::
替换为 CAST (myData as timestamp)
语法。
我有下面的 postgresql 查询,如果直接在 db 上使用它可以正常工作:
select memory_inmb from app where dt=(select dt from app where org='AAAA'
AND to_timestamp(dt/1000) >= date_trunc('month', '2021-07-01 06:07:07+00'::timestamp)
AND to_timestamp(dt/1000) < date_trunc('month', '2021-08-01 06:07:07+00'::timestamp)
limit 1) AND org='AAAA';
在我的存储库中,我将其编写为原生查询,如下所示:
@Query(value="select a.memory_inmb from app a where a.dt=(select a.dt from app a where a.org='AAAA' AND to_timestamp(a.dt/1000) >= date_trunc('month', '2021-07-01 06:07:07+00'::timestamp) AND to_timestamp(a.dt/1000) < date_trunc('month', '2021-08-01 06:07:07+00'::timestamp) limit 1) AND a.org='AAAA'", nativeQuery = true)
List<BigInteger> findMemory();
在我的实现中 class 现在我只调用 return this.appRepository.findMemory();
这给了我以下语法异常:
org.postgresql.util.PSQLException: ERROR: syntax error at or near ":"
Position: 148
为什么我可以 运行 直接在数据库上查询就好了,但是将其用作本机查询却不起作用?
冒号需要转义,所以 JPA 的 ::
应该变成 \:\:
,如此处解释:
(对于 JPA :
表示命名参数)
在您的情况下,您还可以将 ::
替换为 CAST (myData as timestamp)
语法。