Ниже приведены способы, которые я пытаюсь:
@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: пропущено выражение.
Может кто-нибудь предложить Глобальный выход, чтобы исправить это дело.