gpt4 book ai didi

java - JPA查询相当于mysql查询

转载 作者:行者123 更新时间:2023-11-29 00:26:21 24 4
gpt4 key购买 nike

下面是 mysql 查询,它运行良好,在 mysql 控制台上给出了我预期的结果。

select * from omni_main as t where t.date_time BETWEEN STR_TO_DATE(CONCAT('2011', '08', '01'),'%Y%m%d') AND LAST_DAY(STR_TO_DATE(CONCAT('2012', '08','01'), '%Y%m%d')) group by year(date_time),month(date_time) 

我需要它的 JPA 等效查询。以下是我正在尝试但没有返回任何内容。

String queryStr = "select * from OmniMainEntity o where o.dateTime BETWEEN STR_TO_DATE(CONCAT('"+fromYear+"', '"+fromMonth+"','01'), '%Y%m%d') AND " 
+"LAST_DAY(STR_TO_DATE(CONCAT('"+toYear+"', '"+toMonth+"','01'), '%Y%m%d'))";

Query query = manager.createQuery(queryStr);
System.out.println("Result Size: "+query.getResultList().size());

这里的fromYearfromMonthtoYeartoMonth是创建queryStr<时使用的方法参数.

请指出我可能错的地方!

也欢迎任何其他实现目标的方式!

最佳答案

在使用JPA Query时,最好不要使用数据库指定的sql函数,比如STR_TO_DATE。

你可以试试这个方式(Hibernate方式,JPA应该类似):

首先,您可以像下面这样从“fromYear”和“fromMonth”解析一个 java.util.Date 对象:

DateFormat df = new SimpleDateFormat("yyyyMMdd");
Date startDate = df.parse(fromYear + "" + fromMonth + "01");
Date endDate = df.parse(.....);

然后,将它们设置到 JPA 查询中。

String queryStr = "select * from OmniMainEntity o where o.dateTime BETWEEN :startDate AND :endDate)"; // The query now changed to database independent
Query query = manager.createQuery(queryStr);
query.setDate("startDate", startDate);
query.setDate("endDate", endDate);

最后,进行搜索:

System.out.println("Result Size: "+query.getResultList().size());

关于java - JPA查询相当于mysql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18733324/

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