首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Spring Data Rest:"Date is null“查询抛出postgres异常

Spring Data Rest:"Date is null“查询抛出postgres异常
EN

Stack Overflow用户
提问于 2016-02-23 07:46:43
回答 4查看 12K关注 0票数 15

我使用Spring Boot和Data Rest在Java8中创建了一个简单的微服务,并获得了postgres异常。

我的实体:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Entity
public class ArchivedInvoice implements Serializable {
    ...
    @Column
    private String invoiceNumber;
    @Column
    private java.sql.Date invoiceDate;
    ...
}

我的仓库界面:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RepositoryRestResource(collectionResourceRel = "archivedinvoices", path = "archivedinvoices")
public interface ArchivedInvoiceRepository extends PagingAndSortingRepository < ArchivedInvoice, Long > {
    ...
@RestResource(rel = "findByXYZ", path = "findByXYZ")
@Query(value = "SELECT ai FROM #{#entityName} ai WHERE "
        + "(:invoiceNumber IS NULL OR ai.invoiceNumber LIKE :invoiceNumber) AND "
        + "(:invoiceDate IS NULL OR ai.invoiceDate = :invoiceDate)" 
        )
public Page < ArchivedInvoice > findByXYZ(
        @Param("invoiceNumber") @Nullable String invoiceNumber,
        @Param("invoiceDate") @Nullable Date invoiceDate,
        Pageable p);
    ...
}

如果我调用".../findByXYZ?invoiceDate=2016-02-22",我会得到以下错误信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet
...
Caused by: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
...
Caused by: org.postgresql.util.PSQLException: FEHLER: could not determine data type of parameter

但是,当我删除":invoiceDate IS NULL“部分时,它就可以工作了。如何检查invoiceDate参数是否为空?

EN

回答 4

Stack Overflow用户

发布于 2019-01-16 18:58:05

我花了一些时间来研究这一点,因为我真的想比较查询中的"date is null“,这就是结果:

当您使用"cast(foo.date as date) is null“时,如果字段不为空,则可以正常工作。如果字段为空,则抛出此异常:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
org.postgresql.util.PSQLException: ERROR: cannot cast type bytea to date

解决方案是使用coalesce:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
coalesce(:date, null) is null

无论有没有现场测试的数据,它都可以很好地工作。

我的查询示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Query("SELECT c "
        + " FROM Entity c "
        + " WHERE "
        + "       and ( (coalesce(:dateFrom, null) is null and coalesce(:dateUntil, null) is null) "
        + "             or ((coalesce(c.date, null) is not null) "
        + "                 and ( "
        + "                        ((coalesce(:dateFrom, null) is null and coalesce(:dateUntil, null) is not null) and c.date <= :dateUntil) "
        + "                     or ((coalesce(:dateUntil, null) is null and coalesce(:dateFrom, null) is not null) and c.date >= :dateFrom)"
        + "                     or (c.date between :dateFrom and :dateUntil)"
        + "                 )"
        + "             )"
        + "       ) "

希望它能为你工作!

票数 10
EN

Stack Overflow用户

发布于 2016-08-31 16:57:03

我相信@Bonifacio是正确的,因为Postgres在执行IS NULL测试时无法确定@Param("invoiceDate")参数的类型。我有一些与您的查询类似的查询,它们在内存中的H2数据库中表现得与预期一样,但在Postgres集成测试中失败。

我可以通过将参数转换为如下所示的日期来解决此问题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Query(value = "SELECT ai FROM #{#entityName} ai WHERE "
    + "(:invoiceNumber IS NULL OR ai.invoiceNumber LIKE :invoiceNumber) AND "
    + "(cast(:invoiceDate as date) IS NULL OR ai.invoiceDate = :invoiceDate)" 
    )
票数 7
EN

Stack Overflow用户

发布于 2018-05-21 19:03:59

我在Postgres9.5中的LocalDateTime类型的字段和字段Timestamp中也遇到过类似的问题。我解决了它的转换,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    @Query("SELECT c "
        + "FROM Contract c "
        + "WHERE "
        + "(:idContract IS NULL OR c.idContract = :idContract) AND "
        + "(CAST(:dtCancelInitial AS java.time.LocalDateTime) IS NULL OR (c.dtCancel >= :dtCancelInitial AND c.dtCancel < :dtCancelFinal)) "
        + "ORDER BY c.idContract")
List<Contract> findContratConsultaCancelamento(@Param("idContract") Long idContract, @Param("dtCancelInitial") LocalDateTime dtCancelInitial, @Param("dtCancelFinal") LocalDateTime dtCancelFinal);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35571624

复制
相关文章
Spring Boot:Data Rest Service
在文章RESTful by Spring Boot with MySQL通过在Controller中引入BookRepository来对外提供REST API。Spring Boot还可以通过spring-boot-starter-data-rest来对外提供REST API,可以免于编写对应的Controller,且具备分页和排序的功能。
阿杜
2018/08/06
1K0
Spring Boot:Data Rest Service
Spring Data REST 与 Spring RestTemplate 实战详解
这篇分为两部分内容进行介绍(Spring Data REST 和 Spring RestTemplate)。我之前有一篇文章完整的介绍了 HTTP 协议的内容,而这两个工具中一个帮我们完成 Client 的实现,另一个帮我们完成 Server端的实现。 希望大家对 Spring 和 HTTP 之间有个完整的认识,并能够优雅地使用。 RestTemplate 认识 RestTemplate org.springframework.web.client.RestTemplate 位于 spring-web 的核
CSDN技术头条
2018/03/26
5.5K0
Spring Data REST 与 Spring RestTemplate 实战详解
Spring Data(二)查询
查询的构建机制对于Spring Data的基础是非常有用的。构建的机制将截断前缀find…By、read…By、query…By、count…By、get…By等,从剩余的部分开始解析。省略号可以进一步使用distinct等关键字创建查询。第一个By作为分界符,后面的部分将开始解析。最基础的,你可以使用实体中的属性定义条件并且可以使用And或Or连接它们。
小忽悠
2018/09/04
8630
springboot+jpa+spring-data-rest 快速实现rest应用
本例使用springboot,并使用了 spring-data-rest 和 spring-data-jpa
吟风者
2020/02/10
7720
Spring-Data-REST轻松搞定RESTfulAPI
背景 昨天同事问我有没有研究过 ,没有~但是看名字就大概知道是做什么的(命名的重要性),因为之前有了解过 ,过一会发过两个截图过来。真的很强大,感觉这个在使用RESTful风格接口协议的微服务时都不用写Controller了。 什么是Spring Data REST Spring Data REST是基于Spring Data的Repository,把 Repository 自动输出为REST资源,目前支持Spring Data JPA、Spring Data MongoDB、Spring Data Ne
企鹅号小编
2018/02/26
1.1K0
Spring-Data-REST轻松搞定RESTfulAPI
Python抛出异常_python抛出异常的作用
在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误
全栈程序员站长
2022/11/02
2.5K0
Spring Data Commons 示例查询
示例查询 (QBE) 是一种用户友好的查询技术,具有简单的界面。它允许动态创建查询,并且不需要您编写包含字段名称的查询。事实上,Query by Example 根本不需要您使用特定于商店的查询语言编写查询。
IT胶囊
2021/09/28
7960
Spring Data Commons 示例查询
【C++ 语言】异常 ( 抛出字符串异常 | 抛出异常对象 | 抛出任意对象 | 抛出自定义异常 )
1. 异常处理 : 使用 " try{}catch(){} " 将抛出异常的代码包起来 , 注意将可能抛出异常的代码包裹在 try 后的大括号中 , 将异常处理逻辑放在 catch 后的大括号中 ;
韩曙亮
2023/03/27
1.3K0
[Spring Boot] Spring boot 整合mybatis、postgresql [Gradle构建项目]
[Spring Boot] Spring boot 整合mybatis、postgresql [Gradle构建项目] [Spring Boot] Spring boot 整合mybatis、postgresql [Gradle构建项目] 依赖关系 下文中libs[“xxx”]的写法是全局管理依赖,具体开发时使用以下格式即可 compile(group: 'org.postgresql', name: 'postgresql', version: '42.2.5', ext: 'pom') build.gr
架构探险之道
2019/07/25
2.1K0
Spring Data REST不完全指南(二)
上一篇文章介绍了Spring Data REST的功能及特征,以及演示了如何在项目中引入Spring Data REST并简单地启动演示了Spring Data REST项目。在本文中,我们将深入了解Spring Data REST的特性,以此来满足我们日常api开发工作的要求。
东溪陈姓少年
2020/08/06
1.1K0
Spring Data REST不完全指南(三)
上一篇我们介绍了使用Spring Data REST时的一些高级特性,以及使用代码演示了如何使用这些高级的特性。本文将继续讲解前面我们列出来的七个高级特性中的后四个。至此,这些特性能满足我们大部分的接口开发场景。
东溪陈姓少年
2020/08/06
6760
Spring Data REST不完全指南(一)
Spring Data REST是Spring Data项目的一部分,可轻松在Spring Data存储库上构建超媒体驱动的REST Web服务。
东溪陈姓少年
2020/08/06
1.6K0
让 Restful API 更加 Simpler:Spring Data Rest
Spring Data REST 作为 Spring Data 项目的子集,开发者只需使用注解 @RepositoryRestResource 标记,就可以把整个 Repository 转换为 HAL 风格的 REST 资源,目前已支持 Spring Data JPA、Spring Data MongoDB、Spring Data Neo4j等等。
happyJared
2019/04/18
1.6K0
让 Restful API 更加 Simpler:Spring Data Rest
Spring Data Rest!五分钟帮我们实现Rest服务
一直认为,Spring Data是与第三方组件进行数据交换的全家桶的整合,比如Spring Data Jpa是数据库使用,Spring Data LDAP是LDAP的使用,Spring Data Redis是Redis的使用,Spring Data Elasticsearch是Elasticsearch的使用。
品茗IT
2020/05/28
3.3K0
Spring Data JPA的查询方式
使用Spring Data JPA提供的查询方法已经可以解决大部分的应用场景,但是对于某些业务来说,我们还需要灵活的构造查询条件,这时就可以使用@Query注解,结合JPQL的语句方式完成查询
暴躁的程序猿
2022/03/24
2.3K0
.net remoting 抛出异常
所有在远程软件运行的类,如果需要传输到本地,都需要继承 MarshalByRefObject 或其他可以序列化的类。
林德熙
2018/09/19
1.4K0
.net remoting 抛出异常
Spring Data @Repository 的分页查询
相信我,奇葩远比想象得多。经历过一个项目,全部都是网页分页,后端都是大量的 JOIN 和毫无人性的返回几千条记录。
HoneyMoose
2022/09/11
7670
Spring Data @Repository 的分页查询
android 抛出FileNotFoundException异常
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/17
1.6K0
spring data jpa使用流式查询
思路 调用org.hibernate.query.Query.stream方法查询数据 代码样例 import static org.hibernate.annotations.QueryHints.READ_ONLY; import static org.hibernate.jpa.QueryHints.HINT_FETCH_SIZE; import org.hibernate.query.Query; 使用HQL查询 Query<MyEntity> q = entityManager.createQu
路过君
2023/03/08
2.1K0
dotnet remoting 抛出异常
所有在远程软件运行的类,如果需要传输到本地,都需要继承 MarshalByRefObject 或其他可以序列化的类。
林德熙
2019/09/27
1.4K0
dotnet remoting 抛出异常

相似问题

Spring Data JPA删除本机查询抛出异常

20

使用Spring Data Rest抛出自定义异常

125

Spring-data-rest POST链接抛出空指针异常。

15

Spring Data JPA抛出异常

10

Spring Data Rest歧义关联异常

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文