java – JPA,自定义查询和日期
我面临一个奇怪的问题.我搜索包括堆栈溢出和JPA和自定义查询我应该指定参数.所以我有一个查询字符串,因为我有超过14个字段,但我面临日期问题.我总是得到IllegalStateException
INFO: query STRING = SELECT t FROM Tickets t WHERE t.startdate > :startDate AND t.enddate < :endDate ORDER BY t.status DESC WARNING: #{ticketController.search}: java.lang.IllegalStateException: Query argument startDate not found in the list of parameters provided during query execution. 至于我的查询: Query q = em.createQuery(query).setParameter("startDate",startDate,TemporalType.TIMESTAMP).setParameter("endDate",endDate,TemporalType.DATE); 虽然我得到的参数没有找到,但我在setParameter中有它,并且在INFO行中看到的查询中也设置了它. 有任何想法吗? 提前致谢 编辑: INFO: query STRING = SELECT t FROM Tickets t WHERE t.startdate > ?1 AND t.enddate < ?2 ORDER BY t.status DESC WARNING: #{ticketController.search}: java.lang.IllegalStateException: Query argument 1 not found in the list of parameters provided during query execution. q = em.createQuery(query).setParameter(1,TemporalType.TIMESTAMP).setParameter(2,TemporalType.TIMESTAMP); 另外,根据建议,我已经检查过我使用的日期是java.util.Date.在实体类中我有Timestamp.但我仍然无法做到这一点,也不确定我失败的地方. 只是为了确保所有的东西都是他们应该的,我强迫查询是字符串,我得到了正确的例外: INFO: query STRING = SELECT t FROM Tickets t WHERE t.startdate > :startDate AND t.enddate < :endDate ORDER BY t.status DESC WARNING: #{ticketController.search}: java.lang.IllegalArgumentException: You have attempted to set a value of type class java.lang.String for parameter startDate with expected type of class java.util.Date 但话说回来,我改变了约会并且失败了:S 从调试和javadoc我得到以下内容: IllegalStateException – 如果调用Java Persistence查询语言UPDATE或DELETE语句. 我没有做更新也没有删除:/ 编辑2:添加实体相关部分: @Basic(optional = false) @NotNull @Column(name = "startdate") @Temporal(TemporalType.TIMESTAMP) private Date startdate; @Column(name = "enddate") @Temporal(TemporalType.TIMESTAMP) private Date enddate; 对于数据库创建脚本的AS,正在创建列,如下所示: startdate timestamp with time zone NOT NULL,endate timestamp with time zone, 如果我做一个正常的SQL查询,如: 解决方法
两个javadoc
setParameter(String name,java.util.Date value,TemporalType temporalType)` setParameter(String name,java.util.Calendar value,TemporalType temporalType)` 状态:
由于您未提供完整代码,请验证: > Java值startDate的类型为java.util.Date或java.util.Calendar.> SQL列startDate具有有效的SQL日期类型TIMESTAMP. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – Spring:使用工厂bean创建任意数量的bean
- synchronized(this) 与synchronized(class) 之间的区别
- Java – Google App Engine Spring MVC Annotations的速度问
- 图片叠加效果Java代码实现
- Apache Web服务器,Java Web服务 – Hello World教程
- java – 正则表达式在弹簧控制器
- java – 在OOP中,在类中使用“this”的最佳实践是什么?
- java – 类声明中的成员接口是否隐含public?
- java – ‘maven jetty:run’如何工作?
- Java InputStream在Thread中关闭