我正在尝试使用命名查询在日期字段上使用LIKE表达式执行查询,如下所示;
public Users getResultsByDate(Date regDate){
List<Users> dbUsers = new ArrayList<Users>();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Query searchQuery = getEntityManager().createNamedQuery("getUserByRegDate");
searchQuery.setParameter("regDate", "%"+dateFormat.format(regDate)+"%");
try{
dbUsers = searchQuery.getResultList();
}
catch(Exception ex){
dbUsers = new ArrayList<Users>();
}
return dbUsers;
}
对应类中的名称查询为:
@NamedQuery(name = "getUserByRegDate", query = "SELECT user FROM Users user WHERE user.regDate LIKE :regDate"),
该查询正在使用以前的JPA 2.0版本进行工作。当我在JPA 2.1上运行时执行相同的命令时,出现以下错误;
您试图为以下类设置类型为java.lang.String的值:
参数:regDate,具有类java.util.Date的预期类型...
在JPA 2.1上运行时,如何解决此问题?在JPA 2.0中一切正常。
最佳答案
尝试使用本机命名查询,将user.reg_date
转换为字符串,然后将其与运算符like
进行比较。对于Oracle DB,例如:
@NamedNativeQuery(name = "getUserByRegDate", query =
"SELECT user FROM Users user WHERE TO_CHAR(user.reg_date, 'DD-MON-YYYY') LIKE :regDate"),