【发布时间】:2019-02-19 07:06:55
【问题描述】:
您好,我能够获取时间范围之间的数据。 但如果我指定 OR :#{#orgSearch.createdTime.startDateTime} IS NULL 那么我得到异常
这是我的@Query
@Query(value = "select o from Organization o where (o.createdAt >:#{#orgSearch.createdTime.startDateTime} OR :#{#orgSearch.createdTime.startDateTime} IS NULL) AND (o.createdAt <:#{#orgSearch.createdTime.endDateTime}) OR :#{#orgSearch.createdTime.endDateTime} IS NULL ")
但我得到了如下异常......
Caused by: org.postgresql.util.PSQLException: ERROR: could not determine data type of parameter $2
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2103)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1836)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:388)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:273)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.tomcat.jdbc.pool.StatementFacade$StatementProxy.invoke(StatementFacade.java:114)
at com.sun.proxy.$Proxy139.executeQuery(Unknown Source)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:70)
... 95 more
有什么帮助吗?..
【问题讨论】:
-
这是在 JPQL 中?那么它不应该发生在 Hibernate 5 中。如果是原生查询,那么还没有解决方案。
-
@coladict ,是的,这是 JPA 原生查询。是否有任何解决方案可用于此?有什么帮助吗?
-
一种可能的解决方法是在执行查询之前将其设置为非空值,这将确定类型,然后将其设置为空,但我没有尝试过。问题出在 postgresql 服务器上,他们拒绝修复它,因为它“按预期工作”。
标签: postgresql spring-boot jpa spring-data-jpa