2016-03-07 572 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。