Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA中作为参数传递的日期时间表达式_Java_Spring_Hibernate_Datetime - Fatal编程技术网

Java JPA中作为参数传递的日期时间表达式

Java JPA中作为参数传递的日期时间表达式,java,spring,hibernate,datetime,Java,Spring,Hibernate,Datetime,我想比较JPA中的datetime函数。只是想知道如何通过它。顺便说一下,我对JPA很陌生。我的输入日期将如下所示28/12/2014 16:20,我将其解析为日期 我必须将其作为参数传递,但数据库表(MS SQL)包含日期时间格式,如2014-12-28 16:20:38.107 这是我的密码 在@Entity下(我无法编辑此代码,因为我没有这样做的权限。无论如何,其他方法正在访问此实体,我只是重复使用它) 我的实际代码 Date date = simpleDateFormat.par

我想比较JPA中的datetime函数。只是想知道如何通过它。顺便说一下,我对JPA很陌生。我的输入日期将如下所示
28/12/2014 16:20
,我将其解析为日期

我必须将其作为参数传递,但数据库表(MS SQL)包含日期时间格式,如
2014-12-28 16:20:38.107

这是我的密码

@Entity
下(我无法编辑此代码,因为我没有这样做的权限。无论如何,其他方法正在访问此实体,我只是重复使用它)

我的实际代码

    Date date = simpleDateFormat.parse(s);
    Message.findByPublishDate(date);
使用
Debug=true运行上述代码后,我在sql查询中看到传递的参数如下:
messages0\uu.PublishDate=?
这意味着它甚至没有记录日期,我得到以下异常

select operations0_.OperationsMessageID as Operatio1_10_, operations0_.Content as Content2_10_, 
operations0_.CreatedDate as CreatedD3_10_, operations0_.ExpiryDate as ExpiryDa4_10_, 
operations0_.PublishDate as PublishD5_10_, operations0_.Status as Status6_10_, operations0_.Title 
as Title7_10_, operations0_.OperationsMessageTypeID as Operatio8_10_ from OperationsMessage 
operations0_ where operations0_.PublishDate=?
例外情况详情:

org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:172)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:155)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:417)
at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59)
at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:147)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.data.jpa.repository.support.LockModeRepositoryPostProcessor$LockModePopulatingMethodIntercceptor.invoke(LockModeRepositoryPostProcessor.java:105)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
at com.sun.proxy.$Proxy44.findByPublishDate(Unknown Source)

您不需要解析日期参数,请参见以下示例:

query.setParameter("publishDate", publishDate, TemporalType.TIMESTAMP);

您只需使用所需的参数类型设置参数,在本例中为时间戳,因此可以使用TemporalType.timestamp。

很可能是Spring数据生成的JPQL查询无法工作,因为列定义缺少注释。规范规定必须将此注释指定给任何
java.util.Date
java.util.Calendar
列类型

我知道你说过你不能改变它,但我认为没有选择:

    @Temporal(TemporalType.DATE)
    @Column(name = "PublishDate", nullable = false)
    private Date publishDate;
如果物理数据库列是时间戳SQL类型,则可能需要TemporalType.TIMESTAMP

或者,该列已指定为。如果是这种情况,那么您可能需要使用该日期类型作为
findByPublishDate
的参数,从java.util.date转换为:

    Message.findByPublishDate(new java.sql.Date(date.getTime()));

请显示querySteve,Added Query Thanks这是生成的SQL,我们需要查看JPQL查询。另外,
PublishDate
的SQL列类型是什么。公共操作消息findByPublishDate(Date PublishDate);-就是这样,我使用的是crudt,它不是查询,只是一个方法调用。显示此方法的源代码是的,您只需要更改查询对象并在jpql语句中设置参数。显示findByPublishDate方法中的代码。
    Message.findByPublishDate(new java.sql.Date(date.getTime()));