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

当日期值为空时,Spring jpa@查询不工作

阎鹏
2023-03-14

我使用JPA和我已经使用@Query两个表的连接,现在我的要求是我可以有可能的值的组合在哪里的条件,有些可能是null或空。

我的@Query包含(value=“Select*From A Left Outer Join B B On A.Id=B.Id,其中:fromDate为空且:toDate为空或B.Activity_Date_Time Between:fromDate and:toDate”)**

我在查询中处理这个,它对String很好,但是对于TIMESTAMP是给一个错误

嵌套异常是org.hibernate.exception.SQLGrammarExctive:无法提取ResultSet]与根本原因java.sql.SQLSynTaxError异常:ORA-00932:不一致的数据类型:预期TIMESTAMP得到BINARY

我已经在日志中从JPA生成SQL,这在SQL开发人员上运行良好

Select
        * 
    From
        table A 
    Left Outer Join
        table B 
            On A.Id=B.Id     
    Where (
            A.Customer = 'fsfsfsdfsfd'
        )    
        and (
            null is null 
            and null is null 
            or B.Activity_Date_Time Between null AND null
        ) 
        And (
            'MATURITY' is null 
            or B.Activity_Type = 'MATURITY'
        );

共有1个答案

万俟玉书
2023-03-14

问题在于您的查询参数:fromDate和:toDate,您正在从代码中传递带有空值的参数。另请参见您的查询:

Select
        * 
    From
        table A 
    Left Outer Join
        table B 
            On A.Id=B.Id     
    Where (
            A.Customer = 'fsfsfsdfsfd'
        )    
        and (
            null is null 
            and null is null 
            or B.Activity_Date_Time Between null AND null
        ) 
        And (
            'MATURITY' is null 
            or B.Activity_Type = 'MATURITY'
        );

您的命名参数将被null替换,如果您将null与null选中,则它将是一个二进制操作。因此,尝试将时间戳从代码传递到@Query以消除这种情况。

 类似资料:
  • 我试图在MongoDb上获取一个名为“fecha”的日志,其中包含一个日期字段。 在Java中执行代码后,我得到下一个查询: 但是我没有得到任何结果。以下是一些数据样本: 我的Java代码是下一个: 谢谢

  • 我正在处理一个SQL查询,以获取循环类的最小开始日期和最大结束日期。数据库的设置方式是,如果类没有继续,则它们有一个结束日期,如果类正在继续,则结束日期为空。该字段是数据类型datetime。 如果结束日期为空,那基本上就是我想要的日期,因为这是最长的结束日期,但我似乎无法解决如何使其生效?我得到该字段中最后一个实际日期是什么,并且无法让查询返回null或更好的是返回我设置的默认日期。 提前谢谢

  • 问题内容: 我想创建一个Ecto查询,该查询按表的年龄(即“最小年龄(月)->最大年龄(月)”)过滤表中的记录。 一种简单的方法是Ecto功能: 这样做的问题是,并非所有孩子都在同一时区,当然也不是所有孩子都在同一时区。该查询将非常接近,但没有发现(有些会在一天之内关闭)。 我一直在尝试使用PostgreSQL的功能来使此查询工作。我可以使用SQL客户端使其正常工作,但是在尝试对片段中的值进行插值

  • 我正在尝试将最近的搜索添加到工具栏上的SearchView: 编辑: btn_search项目:

  • 问题内容: 我有带日期对象的文档。 初始化Firestore的代码: 查询代码: 我总是在获取所有记录,并且看起来where子句没有得到应用。在Firebase控制台上,我看到的存储为时间戳。 Firebase控制台中的文档: 问题答案: Cloud Firestore查询是不可变的,这意味着您无法更改现有查询的属性。如果通过调用方法更改值,它将成为一个新查询。因此,要解决此问题,请链接所有方法调