У меня возникла странная проблема. Я ищу, в том числе здесь, в переполнении стека, а для JPA и Custom query я должен указать параметр. Таким образом, у меня есть строка запроса, так как у меня более 14 полей, но у меня проблемы с датами. Я всегда получаю IllegalStateExceptionJPA, пользовательский запрос и даты
INFO: query STRING = SELECT t FROM Tickets t WHERE t.startdate > :startDate AND t.enddate < :endDate ORDER BY t.status DESC
WARNING: #{ticketController.search}: java.lang.IllegalStateException: Query argument startDate not found in the list of parameters provided during query execution.
, как для моего запроса:
Query q = em.createQuery(query).setParameter("startDate", startDate, TemporalType.TIMESTAMP).setParameter("endDate", endDate, TemporalType.DATE);
Хотя я получаю, что параметр не найден, он у меня в setParameter, а также установить в запросе как видно в строке INFO.
Любые идеи?
Заранее спасибо
EDIT:
INFO: query STRING = SELECT t FROM Tickets t WHERE t.startdate > ?1 AND t.enddate < ?2 ORDER BY t.status DESC
WARNING: #{ticketController.search}: java.lang.IllegalStateException: Query argument 1 not found in the list of parameters provided during query execution.
q = em.createQuery(query).setParameter(1, startDate, TemporalType.TIMESTAMP).setParameter(2, endDate, TemporalType.TIMESTAMP);
Также и в соответствии с рекомендациями, я проверил, что дата я использую java.util.Date. и в классе сущности у меня есть отметка времени. Но все-таки я не могу работать и не уверен, где я потерплю неудачу.
Просто чтобы убедиться, что все вещи, как они должны, я вынужден запрос быть строкой, и я получил правильное исключение:
INFO: query STRING = SELECT t FROM Tickets t WHERE t.startdate > :startDate AND t.enddate < :endDate ORDER BY t.status DESC
WARNING: #{ticketController.search}: java.lang.IllegalArgumentException: You have attempted to set a value of type class java.lang.String for parameter startDate with expected type of class java.util.Date
Но опять же, я меняю на сегодняшний день, и это не может: S Я проверил причины этого IllegalStateException:
и от отладки и от javadoc я получаю следующее: getResultList
IllegalStateException - если вызывается для языка запросов Java Persistence UPDATE или DELETE.
Я не делаю обновление не стираю:/
EDIT 2: Добавление Entity соответствующей части:
@Basic(optional = false)
@NotNull
@Column(name = "startdate")
@Temporal(TemporalType.TIMESTAMP)
private Date startdate;
@Column(name = "enddate")
@Temporal(TemporalType.TIMESTAMP)
private Date enddate;
AS для создаваемого сценария базы данных столбцов создаются следующим образом:
startdate timestamp with time zone NOT NULL,
endate timestamp with time zone,
Если я нормальный SQL запрос типа: «выберите * из tbl_tickets где StartDate> '2012-02-01 00:00:00' и ENDDATE < '2013-03-18 23:59:50' '
Я получаю желаемые результаты. Наверное, я мог бы сделать с собственным запросом, но это обошло бы проблему и не исправляло бы эту проблему, не так ли?
EDIT 3: Хотя я все настроено правильно, то инициализация бин снова вызвав запрос без аргументов (. Извини и спасибо всем за вашу помощь Это помогло мне проверить, что было неладно)
'endate' is in SQL - это опечатка, правильно? Должен быть «enddate»? –