gpt4 book ai didi

带 2 个参数的 java jpql 查询

转载 作者:太空宇宙 更新时间:2023-11-04 12:07:44 47 4
gpt4 key购买 nike

我在使用 2 个参数的 jpql 查询时遇到问题:

这是查询:

public List<OrganizedUe> findByAcademicYear(Date start, Date end)
{
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
String startFormat = format1.format(start.getTime());
String endFormat = format1.format(end.getTime());
List<OrganizedUe> list;
String queryString =
"SELECT o FROM OrganizedUe o "
+ "WHERE o.startDate >= :param1 "
+ "AND "
+ "o.endDate <= :param2 "
+ "ORDER BY o.startDate";
Query q = em.createQuery(queryString);
q.setParameter("param1", startFormat);
q.setParameter("param2", endFormat);
list = q.getResultList();
return list;
}

如果我运行此函数,我会收到来自 Brownser 的错误:

Caused by: java.lang.IllegalArgumentException: You have attempted to set a value of type class java.lang.String for parameter param1 with expected type of class java.util.Date from query string SELECT o FROM OrganizedUe o WHERE o.startDate >= :param1 AND o.endDate <= :param2 ORDER BY o.startDate.

奇怪的是,我在 Debug模式下查看了 startDate 和 endFormat 的值,并且 2 个字符串具有类似 YY-MM-DD 的值,但根据错误我应该发送一个日期?

我做了另一个测试,用以下格式对 :param1 和 :param2 进行硬编码:“2014-09-15”,在这种情况下我的函数可以工作。

您知道问题可能出在哪里吗?

谢谢

编辑:

这是我的实体 OrganizedUe 中开始和结束的定义:

@Basic(optional = false)
@NotNull
@Column(name = "start_date")
@Temporal(TemporalType.DATE)
private Date startDate;
@Basic(optional = false)
@NotNull
@Column(name = "end_date")
@Temporal(TemporalType.DATE)
private Date endDate;

最佳答案

不用转换为字符串,只需使用日期变量即可:

q.setParameter("param1", start);
q.setParameter("param2", end);

如果您需要开始作为第一个日期并结束作为第二个日期(作为一整天),您可以将它们设置为一天的开始/结束:

start.setHour(0);
end.setHour(23);
start.setMinutes(0);
end.setMinutes(59);
// and the same for seconds :)

只需将时间设置为开始时 0:00:00 和结束时 23:59:59。

关于带 2 个参数的 java jpql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40202217/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com