在实体类中使用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.IllegalArgumentExcture:您试图设置类型类的值java.lang.字符串的参数值与预期类型的类java.lang.整数从查询字符串SELECT c从分类c WHEREc.id喜欢:值。
但当使用这种方法时,工作不会出错。
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<>();
}
我在JPA中使用eclipselink 2.6
我用这个代码解决这个问题。
public List<Classification> search(String value) {
Query query = getEntityManager().createQuery(getNamedQueryCode(entityClass, "Classification.search").replace(":value", value));
query.setMaxResults(10);
return query.getResultList();
}
此方法通过nameKey和class从实体类中获取namedQuery字符串。
private String getNamedQueryCode(Class<? extends Object> clazz, String namedQueryKey) {
NamedQueries namedQueriesAnnotation = clazz.getAnnotation(NamedQueries.class);
NamedQuery[] namedQueryAnnotations = namedQueriesAnnotation.value();
String code = null;
for (NamedQuery namedQuery : namedQueryAnnotations) {
if (namedQuery.name().equals(namedQueryKey)) {
code = namedQuery.query();
break;
}
}
if (code == null) {
if (clazz.getSuperclass().getAnnotation(MappedSuperclass.class) != null) {
code = getNamedQueryCode(clazz.getSuperclass(), namedQueryKey);
}
}
//if not found
return code;
}
根据JPQL的BNF,“LIKE”仅用于字符串值。与非字符串值一起使用只能是供应商扩展,因此依赖于供应商。它是命名查询、条件还是基于字符串的JPQL的一部分都无关紧要。
like_expression ::= string_expression [NOT] LIKE pattern_value [ESCAPE escape_character]
我想验证传入的数字是否为0到100之间的整数值(不含分数)。 我有javax的dto。验证批注: Dto在@RestController类中用作输入方法(@PostMapping)参数。 @Min和@Max工作正常,但@Digits不行。当我发送数字时,例如95.5,它会转换为95,并引发任何异常。为什么不使用@数字进行检查?
我有一个基本的疑问,我们可以增加整数类对象的引用,而不是任何其他类的引用(D类有1个整数数据成员和一个参数化构造函数)。 这里x和d都是引用,但我们仍然可以增加整数引用,而不增加任何其他引用。我错过了一些非常基本的东西,请帮助我。
null 只使用数据类型有什么特别的缺点吗? 使用数据类型代替数据类型有意义吗?
如何计算下面代码中的整数值: 我想实现如果0是超过1所以将打印假如果1是超过0将打印真
IntegerStringConverter方法工作得更好:不接受所有像“-16-123”这样的无效数字,而像“0123”这样的数字被转换为“123”。但是只有当文本被提交(通过按enter键)或TextField失去焦点时,才会发生转换。 是否有一种方法可以在每次更新TextField的值时用IntegerStringConverter强制转换第二个方法?
我正在使用BufferedReader类读取Java程序中的输入。我想从一个用户那里读取输入,这个用户可以在一行空格中输入多个整数数据。我想读取整数数组中的所有这些数据。 输入格式-用户首先输入他/她想要输入的数字 然后在下一行中输入多个整数值- 输入: 5. 2 456 43 21 12 现在,我使用BufferedReader的对象(br)读取输入 接下来,我想读取数组中的下一行输入 但是我们