Я пытаюсь найти результаты в базе данных postgresql между двумя датами (поле, описанное в ddbb как timestamp).Сравнение дат в jpa
У меня есть эти три записей, которые должны соответствовать целям: 2016-03-04 00:00:00 2016-03-04 14:00:00 2016-03-04 10:56:00
final Calendar fechaMinima = Calendar.getInstance();
и установите параметры, которые я хочу.
JPA столбец определяется:
@Column(name = "tim_ofrecim")
@NotNull
@Temporal(TemporalType.TIMESTAMP)
@DateTimeFormat(style = "M-")
private Date Tewslofr.timOfrecim;
С JPA Я пытаюсь найти их с помощью следующего кода:
@NamedQuery(name = "ofr_query2", query = "SELECT COUNT (*) FROM Tewslofr ofr "
+ "WHERE ofr.id.codIdprodto =:codIdprodto "
+ "AND ofr.codUser =:codUser "
+ "AND ofr.timOfrecim BETWEEN :timMinimo AND :timMaximo")
public static Long getMethod(final String codProducto,
final String codUser, final Calendar fechaMinima,
final Calendar fechaMaxima) {
return entityManager().createNamedQuery("ofr_query2", Long.class)
.setParameter("codIdprodto", codProducto)
.setParameter("codUser", codUser)
.setParameter("timMinimo", fechaMinima, TemporalType.TIMESTAMP)
.setParameter("timMaximo", fechaMaxima, TemporalType.TIMESTAMP)
.getSingleResult();
}
и получить это исключение:
вызвано следующими причинами: java.lang.IllegalArgumentException: значение параметра [java.util.GregorianCalendar [time = ?, areFieldsSet = false, areAllFieldsSet = true, lenient = true, zone = s un.util.calendar.ZoneInfo [ID = "Европа/Париж", смещение = 3600000, dstSavings = 3600000, useDaylight = верно, переходы = 184, lastRule = java.util.SimpleTimeZone [ID = Europe/Paris, смещение = 3600000, dstSavings = 3600000, useDaylight = верно, StartYear = 0, StartMode = 2, StartMonth = 2, startDay = -1, startDayOfWeek = 1, = 3600000 начальный промежуток, startTimeMode = 2, endMode = 2, endMonth = 9, endDay = -1, endDayOfWeek = 1, EndTime = 3600000, endTimeMode = 2]], firstDayOfWeek = 2, minimalDaysInFirstWeek = 4, ERA = 1, ГОД = 2016, МЕСЯЦ = 2, WEEK_OF_YEAR = 10, WEEK_OF_MONTH = 2, DAY_OF_MONTH = 1, day_of_year = 67, DAY_OF_WEEK = 2, DAY_OF_WEEK_IN_MONTH = 1, AM_PM = 0, HOUR = 8, HOUR_OF_DAY = 0, MINUTE = 0, SECOND = 0, MILLISECOND = 434, ZONE_OFFSET = 3600000, DST_OFFSET = 0]] не соответствует типу [java.util. Дата]
стек трассировки это:
org.springframework.dao.InvalidDataAccessApiUsageException: значение параметра [java.util.GregorianCalendar [time = ?, areFieldsSet = false, areAllFieldsSet = true, lenient = true, zone = sun.util.calendar.ZoneInfo [id = "Europe /Paris",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=184,lastRule=java.util.SimpleTimeZone[id=Europe/Paris,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0, StartMode = 2, StartMonth = 2, startDay = -1, startDayOfWeek = 1, = 3600000 начальный промежуток, startTimeMode = 2, endMode = 2, endMonth = 9, endDay = -1, endDayOfWeek = 1, EndTime = 3600000, endTimeMode = 2] ], firstDayOfWeek = 2, minimalDaysInFirstWeek = 4, ERA = 1, ГОД = 2016, МЕСЯЦ = 2, WEEK_OF_YEAR = 10, WEEK_OF_MONTH = 2, DAY_OF_MONTH = 1, day_of_year = 67, DAY_OF_WEEK = 2, DAY_OF_WEEK_IN_MONTH = 1, AM_PM = 0, HOUR = 9, HOUR_OF_DAY = 0, MINUTE = 0, SECOND = 0, MILLISECOND = 170, ZONE_OFFSET = 3600000, DST_OFFSET = 0]] не соответствует типу [java.util.Date]; Вложенное исключение - это java.lang.IllegalArgumentException: значение параметра [java.util.GregorianCalendar [time = ?, areFieldsSet = false, areAllFieldsSet = true, lenient = true, zone = sun.util.calendar.ZoneInfo [id = "Европа/Париж », смещение = 3600000, dstSavings = 3600000, useDaylight = верно, переходы = 184, lastRule = java.util.SimpleTimeZone [ID = Европа/Париж, смещение = 3600000, dstSavings = 3600000, useDaylight = верно, StartYear = 0, StartMode = 2, StartMonth = 2, startDay = -1, startDayOfWeek = 1, = 3600000 начальный промежуток, startTimeMode = 2, endMode = 2, endMonth = 9, endDay = -1, endDayOfWeek = 1, EndTime = 3600000, endTimeMode = 2]], firstDayOfWeek = 2, minimalDaysInFirstWeek = 4, ERA = 1, ГОД = 2016, МЕСЯЦ = 2, WEEK_OF_YEAR = 10, WEEK_OF_MONTH = 2, DAY_OF_MONTH = 1, day_of_year = 67, DAY_OF_WEEK = 2, DAY_OF_WEEK_IN_MONTH = 1, AM_PM = 0, ЧАС = 9, HOUR_OF_DAY = 0, MINUTE = 0, SECOND = 0, MILLISECOND = 170, ZONE_OFFSET = 3600000, DST_OFFSET = 0]] не соответствует типу [java.util.Date] на org.springframework.orm.jpa.EntityManagerFactoryUtils. convertJpaAccessExceptionIfPossible (EntityManagerFa ctoryUtils.java:301) at org.springframework.orm.jpa.aspectj.JpaExceptionTranslatorAspect.ajc $ afterTrowing $ org_springframework_orm_jpa_aspectj_JpaExceptionTranslatorAspect $ 1 $ 18a1ac9 (JpaExceptionTranslatorAspect.aj: 15) at com.bbva.arq.front.spring.ewsl.ofrecimientos.api.v1.domain.Tewslofr.getCuentaOfrecimientosAgente_aroundBody2 (Tewslofr.java:49) at com.bbva.arq.front.spring.ewsl. ofrecimientos.api.v1.domain.Tewslofr.getCuentaOfrecimientosAgente (Tewslofr.java:1) at com.bbva.arq.front.spring.ewsl.ofrecimientos.api.v1.daos.ofrecimientos.impl.OfrecimientosDAOImpl.getMethod (OfrecimientosDAOImpl. java: 52) ... Вызвано: java.lang.IllegalArgumentException: Значение параметра [java.util.GregorianCalendar [time = ?, areFieldsSet = false, areAllFieldsSet = true, lenient = true, zone = sun.util.calendar. ZoneInfo [ID = "Европа/Париж", смещение = 3600000, dstSavings = 3600000, useDaylight = верно, переходы = 184, lastRule = java.util.SimpleTimeZone [ID = Europe/Paris, смещение = 3600000, dstSavings = 3600000, useDaylight = правда, StartYear = 0, StartMode = 2, StartMonth = 2, startDay = -1, startDayOfWeek = 1, = 3600000 начальный промежуток, startTimeMode = 2, ан DMODE = 2, endMonth = 9, endDay = -1, endDayOfWeek = 1, EndTime = 3600000, endTimeMode = 2]], firstDayOfWeek = 2, minimalDaysInFirstWeek = 4, ERA = 1, год = 2016, МЕСЯЦ = 2, WEEK_OF_YEAR = 10 , WEEK_OF_MONTH = 2, DAY_OF_MONTH = 1, day_of_year = 67, DAY_OF_WEEK = 2, DAY_OF_WEEK_IN_MONTH = 1, AM_PM = 0, ЧАС = 9, HOUR_OF_DAY = 0, МИНУТНЫЙ = 0, ВТОРОЙ = 0, миллисекунды = 170, ZONE_OFFSET = 3600000, DST_OFFSET = 0]] не соответствует типу [java.util.Date] at org.hibernate.ejb.AbstractQueryImpl.registerParameterBinding (AbstractQueryImpl.java:360) at org.hibernate.ejb.QueryImpl.setParameter (QueryImpl.java:414)
Если я изменяю DATE вместо TIMESTAMP:
public static Long getMethod(final String codProducto,
final String codUser, final Calendar fechaMinima,
final Calendar fechaMaxima) {
return entityManager().createNamedQuery("ofr_query2", Long.class)
.setParameter("codIdprodto", codProducto)
.setParameter("codUser", codUser)
.setParameter("timMinimo", fechaMinima.getTime(), TemporalType.DATE)
.setParameter("timMaximo", fechaMaxima.getTime(), TemporalType.DATE)
.getSingleResult();
}
код возвращает 0.
Любая помощь будет оценена по достоинству.
сердечный привет
Можете ли вы получить весь стек? У меня такое чувство, что исключение вызывается методом .getTime(), а не JPA – maslan
Я редактировал сообщение с помощью stacktrace – Marta