我正在尝试使用命名查询在日期字段上使用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"),

09-26 12:02