SpringBoot oracle.jdbc.OracleDatabaseException: ORA-00932: несовместимые типы данных: ожидаемый DATE получил NUMBER - PullRequest
0 голосов
/ 02 марта 2019

2019-03-01 16: 38: 44.930 WARN 55052 --- [nio-8080-exec-1] ohengine.jdbc.spi.SqlExceptionHelper: Ошибка SQL: 932, SQLState: 42000

2019-03-01 16: 38: 44.930 ОШИБКА 55052 --- [nio-8080-exec-1] ohengine.jdbc.spi.SqlExceptionHelper: ORA-00932: несовместимые типы данных: ожидается, ДАТА получила НОМЕР

2019-03-01 16: 38: 44.946 ОШИБКА 55052 --- [nio-8080-exec-1] oaccC [. [. [/]. [DispatcherServlet]: Servlet.service () для сервлета [dispatcherServlet] в контекстес путем [] выдало исключение [Ошибка обработки запроса;вложенным исключением является org.springframework.dao.InvalidDataAccessResourceUsageException: не удалось извлечь ResultSet;SQL [н / п];вложенное исключение: org.hibernate.exception.SQLGrammarException: не удалось извлечь ResultSet] с коренной причиной

oracle.jdbc.OracleDatabaseException: ORA-00932: противоречивые типы данных: ожидается, ДАТА получила НОМЕР

Запрос, который я хочу в конечном итоге, я думаю, просто неправильно сформирован с использованием Spring CrudRepository:

select * from user_usage where Prs_Id=1104438622 and createddate > sysdate -1;

desc user_usage

Name          Null     Type           
------------- -------- -------------- 
USAGETYPEID   NOT NULL NUMBER(3)      
PRS_ID        NOT NULL NUMBER(18)     
CREATEDID     NOT NULL NUMBER(10)     
CREATEDDATE   NOT NULL DATE           
COMMENTS               VARCHAR2(4000) 
USERAGENTID            NUMBER(10)  

1) POJO

    @Entity
    @Table(name="USER_USAGE)
    public class Usage {

        @Column(name="Prs_Id")
        @Id
        private long prsId;

        @Column(name="createddate")
        private Date createddate;

2) Хранилище

    public interface UsageRepository extends CrudRepository<Usage, Date>{


        //select * from user_usage where Prs_Id=1104438622 and createddate > sysdate -1; --query that I want eventually 
         @Query("SELECT a FROM Usage a WHERE a.prsId=:prsId and a.createddate>=:createddate-1")
         Usage fetchUsageGreaterThanEqual(@Param("prsId") Long prsId, @Param("createddate") Date createddate);
    }

3) Контроллер:

    @Autowired
    UsageRepository usageRepository; 
    static Date myDate;

    @GetMapping("/{prsId}")
     public Usage getUsageByPrsId(@PathVariable Long prsId) {
      return usageRepository.fetchUsageGreaterThanEqual(prsId, myDate);
     }

1 Ответ

0 голосов
/ 03 марта 2019

Ваш Date класс, скорее всего, java.util.Date

static Date myDate;

Вы должны преобразовать его в java.sql.Date, как описано здесь

new java.sql.Date(createddate.getTime())

визбежать проблемы с ORA-00932: inconsistent datatypes: expected DATE got NUMBER

В качестве альтернативы вы также можете использовать классы java.time, как обсуждено здесь и там

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...