首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jpa中日期的比较

jpa中日期的比较
EN

Stack Overflow用户
提问于 2016-03-07 07:13:17
回答 1查看 275关注 0票数 0

我试图在两个日期之间的postgresql数据库中找到结果(在ddbb中描述为时间戳的字段)。

我有三份必须符合目标的纪录: 2016-03-04 :00:00 2016-03-04 14:00 2016-03-04 10:56:00

代码语言:javascript
运行
复制
final Calendar fechaMinima = Calendar.getInstance();

设置我想要的参数。

定义了jpa列:

代码语言:javascript
运行
复制
@Column(name = "tim_ofrecim")
@NotNull
@Temporal(TemporalType.TIMESTAMP)
@DateTimeFormat(style = "M-")
private Date Tewslofr.timOfrecim;

使用JPA,我尝试使用以下代码找到它们:

代码语言:javascript
运行
复制
@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();
}

并获得此例外:

由: zone=sun.util.calendar.ZoneInfo[id="Europe/Paris",:参数值[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,time= offset=3600000,dstSavings=3600000,useDaylight=true,transitions=184,lastRule=java.util.SimpleTimeZoneid=Europe/Paris,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startYear=0,startDay=-1,useDaylight=true,endDay=-1,,#en24,],,#en31,,#en33,,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]

堆栈跟踪如下:

org.springframework.dao.InvalidDataAccessApiUsageException:参数值[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.SimpleTimeZoneid=Europe/Paris,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,useDaylight=true,startDay=-1,startMode=2,en19#,#en32 20,endDay=-1,#en23,#en24,],#en26,#en27,,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,time= offset=3600000,dstSavings=3600000,useDaylight=true,transitions=184,lastRule=java.util.SimpleTimeZoneid=Europe/Paris,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,useDaylight=true,startDay=-1 ],useDaylight=true,en19#,en32 20#,endDay=-1,,#en24,],,#en31,,#en33,,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]在org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:301),org.springframework.orm.jpa.aspectj.JpaExceptionTranslatorAspect.ajc$afterThrowing$org_springframework_orm_jpa_aspectj_JpaExceptionTranslatorAspect$1$18a1ac9(JpaExceptionTranslatorAspect.aj:15),com.bbva.arq.front.spring.ewsl.ofrecimientos.api.v1.domain.Tewslofr.getCuentaOfrecimientosAgente_aroundBody2(Tewslofr.java:49),com.bbva.arq.front.spring,不匹配java.util.Date类型。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)...由: zone=sun.util.calendar.ZoneInfo[id="Europe/Paris",:参数值[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,time= offset=3600000,dstSavings=3600000,useDaylight=true,transitions=184,lastRule=java.util.SimpleTimeZoneid=Europe/Paris,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startYear=0,startDay=-1,useDaylight=true,endDay=-1,,#en24,],,#en31,,#en33,,org.hibernate.ejb.AbstractQueryImpl.registerParameterBinding(AbstractQueryImpl.java:360) at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:414)的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]

如果我更改日期而不是时间戳:

代码语言:javascript
运行
复制
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。

任何帮助都将不胜感激。

最亲切的问候

EN

回答 1

Stack Overflow用户

发布于 2016-03-07 13:57:50

我仍然不知道为什么第一个选项不起作用,但我已经让它与日期选项一起工作。此选项是正确的,但返回0是因为de codIdprodto,而不是因为日期。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35838092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档