Spring jpa @query не работи, когато стойността на датата е нулева

Използвам JPA и използвах @Query свързване на две таблици, сега моето изискване е да мога да имам комбинация от възможни стойности в условие where, някои може да са нулеви или празни.

Моето @Query съдържа (value = "Select * From A a Left Outer Join B b On A.Id=B.Id where :fromDate is NULL and :toDate is NULL or B.Activity_Date_Time Between :fromDate AND :toDate")**

Обработвам това в заявката, работи добре за String, но за TIMESTAMP дава грешка като

вложеното изключение е org.hibernate.exception.SQLGrammarException: не можа да извлече ResultSet] с основна причина java.sql.SQLSyntaxErrorException: ORA-00932: несъвместими типове данни: очаква се TIMESTAMP получи BINARY

Генерирах SQL от JPA в регистрационни файлове, които работят добре на 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'
        );

person AMIT GURAV    schedule 12.05.2020    source източник
comment
Моля, покажете ни пълния метод, който използвате, и генерирания SQL. Моля, форматирайте и двете като изходен код.   -  person Jens Schauder    schedule 13.05.2020


Отговори (1)


Проблемът е с вашите параметри на заявката :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, за да се отървете от това.

person Aman Kumayu    schedule 13.05.2020
comment
просто още едно съмнение, че работи за параметър на низ, само за друг тип данни е неуспешно. - person AMIT GURAV; 15.05.2020
comment
Просто защото стойността по подразбиране null се предава в случай на вашия друг тип данни, Incase, моля, споделете вашия код. - person Aman Kumayu; 15.05.2020