java – JPA,自定义查询和日期
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – JPA,自定义查询和日期,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3022字,纯文字阅读大概需要5分钟。
内容图文
![java – JPA,自定义查询和日期](/upload/InfoBanner/zyjiaocheng/744/5999f7889b244011b056b78c77ee4015.jpg)
我面临一个奇怪的问题.我搜索包括堆栈溢出和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, startDate, TemporalType.TIMESTAMP).setParameter(2, endDate, 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
我检查了这个IllegalStateException的原因:
从调试和javadoc我得到以下内容:
getResultList
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查询,如:
“select * from tbl_tickets where startdate>’2012-02-01 00:00:00’并enddate<'2013-03-18 23:59:50'”
我得到了理想的结果.我想我可以使用原生查询,但这将解决问题,而不是解决这个问题,对吧?
编辑3:虽然我已经正确设置了所有内容,但bean的init再次调用了没有args的查询(抱歉,谢谢大家的帮助.它帮助我检查了什么是错误的)
解决方法:
两个javadoc
setParameter(String name, java.util.Date value, TemporalType temporalType)`
setParameter(String name, java.util.Calendar value, TemporalType temporalType)`
状态:
Throws:
IllegalArgumentException
– if the parameter name does not correspond to a parameter of the query or if the value argument is of incorrect type
由于您未提供完整代码,请验证:
> Java值startDate的类型为java.util.Date或java.util.Calendar.
> SQL列startDate具有有效的SQL日期类型TIMESTAMP.
内容总结
以上是互联网集市为您收集整理的java – JPA,自定义查询和日期全部内容,希望文章能够帮你解决java – JPA,自定义查询和日期所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。