2016-03-07 573 views
0

我在兩個日期之間(在ddbb中用時間戳記描述的字段)試圖找到postgresql數據庫中的結果。jpa中比較日期

我有這三個記錄必須滿足目標: 2016年3月4日00:00:00 2016年3月4日14:00:00 2016年3月4日10時56分○○秒

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 = TRUE,轉換= 184,lastRule = java.util.SimpleTimeZone中的[ID =歐洲/巴黎,偏移量= 3600000, dstSavings = 3600000,useDaylight =真,startYear = 0,STARTMODE = 2,startMonth = 2,朝九特派= -1,startDayOfWeek = 1,開始時間= 3600000,startTimeMode = 2,endMode = 2,endMonth = 9,endday指定= -1,一個endDayOfWeek = 1,結束時間= 3600000,endTimeMode = 2]],Firstdayofweek可= 2,minimalDaysInFirstWeek = 4,ERA = 1,YEAR = 2016,MONTH = 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,微差= 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,朝九特派= -1,startDayOfWeek = 1,開始時間= 3600000,startTimeMode = 2,endMode = 2,endMonth = 9,endday指定= -1,一個endDayOfWeek = 1,結束時間= 3600000,endTimeMode = 2] ],Firstdayofweek可= 2,minimalDaysInFirstWeek = 4,ERA = 1,YEAR = 2016,MONTH = 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 =「Europe/Paris 」偏移= 3600000,dstSavings = 3600000,useDaylight =真,過渡= 184,lastRule = java.util.SimpleTimeZone中[ID =歐洲/巴黎,偏移= 3600000,dstSavings = 3600000,useDaylight =真,startYear = 0,STARTMODE = 2,startMonth = 2,朝九特派= -1,startDayOfWeek = 1,開始時間= 3600000,startTimeMode = 2,endMode = 2,endMonth = 9,endday指定= -1,一個endDayOfWeek = 1,結束時間= 3600000,endTimeMode = 2]] Firstdayofweek可= 2,minimalDaysInFirstWeek = 4,ERA = 1,YEAR = 2016,MONTH = 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,微差= 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 $ afterThrowing $ 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中[時間= ?, areFieldsSet =假,areAllFieldsSet =真,寬大=真,區= sun.util.calendar。區信息[ID = 「歐洲/巴黎」,偏移量= 3600000,dstSavings = 3600000,useDaylight = TRUE,轉換= 184,lastRule = java.util.SimpleTimeZone中的[ID =歐洲/巴黎,偏移量= 3600000,dstSavings = 3600000,useDaylight =真,startYear = 0,STARTMODE = 2,startMonth = 2,朝九特派= -1,startDayOfWeek = 1,開始時間= 3600000,startTimeMode = 2,連接dMode = 2,endMonth = 9,endday指定= -1,一個endDayOfWeek = 1,結束時間= 3600000,endTimeMode = 2]],Firstdayofweek可= 2,minimalDaysInFirstWeek = 4,ERA = 1,YEAR = 2016,MONTH = 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,微差= 170,ZONE_OFFSET = 3600000,DST_OFFSET = 0]]與org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:414)處的org.hibernate.ejb.AbstractQueryImpl.registerParameterBinding(AbstractQueryImpl.java:360) 不匹配類型[java.util.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

任何幫助將不勝感激。

最親切的問候

+0

你能得到整個堆棧跟蹤嗎?我有一種感覺,異常是由.getTime()方法拋出,而不是由JPA – maslan

+0

我已經編輯與堆棧跟蹤 – Marta

回答

0

我仍然不知道爲什麼第一個選項是不行的,但我已與日期的選擇工作。這個選項是正確的,但是由於日期的原因返回了0。