【发布时间】:2022-10-04 23:42:22
【问题描述】:
我的数据库具有字符串类型的“m_date”,并将日期存储为“dd-MM-yyyy”格式。现在我想借助过滤器之间的 JPA 条件查询从表中获取记录。 现在,由于 m_date 存储字符串日期,我不能直接使用 criteriaBuilder.between 函数。但在此之前,我需要使用 SQL 内置函数 CONVERT(date, m_date, 103) 将其转换为 Date。我尝试了类似将字符串日期转换为日期的方法。
SQL查询是这样的
SELECT myId from table where status='PENDING' and CONVERT(date, m_date,103) between fromDate and toDate)
标准 API
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<MyEntity> criteriaQuery = criteriaBuilder.createQuery(MyEntity.class);
Root<MyEntity> root = criteriaQuery.from(MyEntity.class);
Predicate statusPredicate = cb.equal(root.get("status"), cb.literal("PENDING"));
Expression<String> convertFunction = cb.function("CONVERT", String.class, cb.literal("date"), root.get("mDate"), cb.literal(103));
Predicate datePredicate = cb.between(convertFunction, fromDate, toDate); // fromDate and toDate coming from request...
CriteriaQuery<MyEntity> myQuery = criteriaQuery.select(root.get("myId")).where(statusPredicate, datePredicate);
TypedQuery<MyEntity> query = entityManager.createQuery(myQuery);
return query.getResultList();
我收到类似这样的错误
Hibernate: select myentity_0.my_id as col_0_0_ from table where myentity_0.status=? and (CONVERT(?,myentity.m_date,103) between ? and ?)
com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near '@P1'.
有人可以帮我吗,我如何将“日期”作为转换函数的第一个参数?我被困了这么久。帮助将不胜感激。提前致谢。
【问题讨论】:
标签: hibernate jpa spring-data-jpa jpa-2.0 criteria-api