在实体类中使用namedQuery时出错
@NamedQuery(name = "Classification.search", query = "SELECT c FROM Classification c WHERE c.id LIKE :value")
调用namedQuery的方法
public List<Classification> search(String value) {
Query query = getEntityManager().createNamedQuery("Classification.search", Classification.getClass()).setParameter("value", "%"+value+"%");
query.setMaxResults(10);
return query.getResultList();
}
java.lang.IllegalArgumentException:您试图为参数值设置类型类java.lang.String的值,具有类java.lang.Integer的预期类型来自查询字符串SELECT c FROM Classification c WHERE c.id LIKE :值
但是使用此方法时没有错误。
public List<Classification> findLimited(String _clasif, int maxResult) {
String querySt = "SELECT c FROM Classification c WHERE c.id LIKE '%" + _clasif + "%'";
Query query = em.createQuery(querySt);
query.setMaxResults(maxResult);
List<Classification> classif;
classif = query.getResultList();
if (classif != null) {
return classif;
}
return new ArrayList<>();
}
我使用eclipselink 2.6和JPA
答案 0 :(得分:0)
根据JPQ的BNF,&#34; LIKE&#34;仅用于String值。与非String值一起使用只是供应商扩展,因此依赖于供应商。它是命名查询的一部分还是标准或基于字符串的JPQL是无关紧要的。
like_expression ::= string_expression [NOT] LIKE pattern_value [ESCAPE escape_character]
答案 1 :(得分:0)
我通过这段代码解决了这个问题。
plink.exe -serial -sercfg ... < input.txt
此方法通过nameKey和class从实体类获取namedQuery字符串。
public List<Classification> search(String value) {
Query query = getEntityManager().createQuery(getNamedQueryCode(entityClass, "Classification.search").replace(":value", value));
query.setMaxResults(10);
return query.getResultList();
}