JPA: сравнить метку времени с датой, используя именованный запрос - PullRequest
0 голосов
/ 06 февраля 2020

Ниже приведены способы, которые я пытаюсь:

@NamedQueries({
    @NamedQuery(name = "findByJobNameAndCurrentDate0",  query = "SELECT js from JobStatus js WHERE jobStatusPk.jobName=:jobName"),
    @NamedQuery(name = "findByJobNameAndCurrentDate1",  query = "SELECT js from JobStatus js WHERE jobStatusPk.jobName=:jobName and jobStatusPk.startDate=:todaydate"),
    @NamedQuery(name = "findByJobNameAndCurrentDate2",  query = "SELECT js from JobStatus js WHERE jobStatusPk.jobName=:jobName and date(jobStatusPk.startDate)=current_date()"),
    @NamedQuery(name = "findByJobNameAndCurrentDate3",  query = "SELECT js from JobStatus js WHERE jobStatusPk.jobName=:jobName and cast(jobStatusPk.startDate as date)=current_date()"),
    @NamedQuery(name = "findByJobNameAndCurrentDate4",  query = "SELECT js from JobStatus js WHERE jobStatusPk.jobName=:jobName and trunc(jobStatusPk.startDate) = trunc(current_date())")

})

Последний работает, т.е. Trun c, но здесь я использовал функцию oracle Speci c, так как не уверен, будет ли она работать с другими базами данных.

Остальные запросы бесполезны.

Есть альтернативный вопрос, который предлагает TemporalType и Date, но оба не работают.

Для настроек временного типа я сделал

 @Temporal(TemporalType.DATE)
 @Column(name = "STARTDATE")
 private Date startDate;

 JobStatus js = em.createNamedQuery("findByJobNameAndCurrentDate1", JobStatus.class)
                        .setParameter("jobName",JobName.AGREEMENTS)
                        .setParameter("todaydate",new Date(), TemporalType.DATE).getSingleResult();

, но бесполезен, так как результат не найден.

Для Даты просто написано ORA-00936: пропущено выражение.

Может кто-нибудь предложить Глобальный выход, чтобы исправить это дело.

...