Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.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
参数值[2018-04-08T11:02:44]与预期类型[java.util.Date(n/a)]不匹配_Java_Hibernate_Jpa - Fatal编程技术网

参数值[2018-04-08T11:02:44]与预期类型[java.util.Date(n/a)]不匹配

参数值[2018-04-08T11:02:44]与预期类型[java.util.Date(n/a)]不匹配,java,hibernate,jpa,Java,Hibernate,Jpa,我想将此XML发送到rest api服务器: XML请求: <reconcile> <start_date>2018-04-08T11:02:44</start_date> <end_date>2018-04-08T11:02:44</end_date> <page>1</page> </reconcile> SQL查询: public List<PaymentTransactio

我想将此XML发送到rest api服务器:

XML请求:

<reconcile>
  <start_date>2018-04-08T11:02:44</start_date>
  <end_date>2018-04-08T11:02:44</end_date>
  <page>1</page>
</reconcile>
SQL查询:

public List<PaymentTransactions> transactionsByDate(LocalDateTime start_date, LocalDateTime end_date) throws Exception {

        String hql = "select e from " + PaymentTransactions.class.getName() + " e where e.created_at >= ? and e.created_at <= ?";
        Query query = entityManager.createQuery(hql).setParameter(0, start_date).setParameter(1, end_date));
        List<PaymentTransactions> paymentTransactions = (List<PaymentTransactions>) query.getResultList();
        return paymentTransactions;
    }
在将日期值作为SQL查询的参数发送之前,是否需要对其进行转换?
或者我需要使用其他类型的日期?

您正在设置
start\u Date
,这是一个
LocalDateTime
,作为SQL的参数;错误消息告诉您它需要一个
java.util.Date
,并且它不理解
LocalDateTime
对象。您需要将其转换为:

Date startDate = Date.from(start_date.atZone(ZoneId.systemDefault()).toInstant());
Date endDate = Date.from(end_date.atZone(ZoneId.systemDefault()).toInstant());

Query query = entityManager.createQuery(hql)
                  .setParameter(0, startDate).setParameter(1, endDate));
(假设您使用的是
java.time.LocalDateTime
,并且希望使用系统的默认时区)


这是必要的,因为不幸的是,JPA/Hibernate(尚未)无法自动理解相对较新的
java.time
类(它要求您使用旧的
java.util.Date
类)。

因为您使用
createQuery
和JPQL,预期的类型在解析过程中确定,您在
PaymentTransactions
类中指定的是
java.util.Date


只需将
PaymentTransactions
类中创建的
类型更改为
LocalDateTime
。Hibernate的最新版本完全支持它。

Hibernate从5.0开始在一个单独的模块中支持
java.time
类,从5.2开始它是内置的。
java.lang.IllegalArgumentException: Parameter value [2018-04-08T11:02:44] did not match expected type [java.util.Date (n/a)]
Date startDate = Date.from(start_date.atZone(ZoneId.systemDefault()).toInstant());
Date endDate = Date.from(end_date.atZone(ZoneId.systemDefault()).toInstant());

Query query = entityManager.createQuery(hql)
                  .setParameter(0, startDate).setParameter(1, endDate));