有人可以告诉我,这为什么不起作用:
criteria.add(cb.like((myentity.<Integer>get("integerid")).as(String.class), "2%"))
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
The object [2%], of class [class java.lang.String], from mapping [org.eclipse.persistence.mappings.DirectToFieldMapping[integerid-->MYENTITY.INTEGERID]] with descriptor [RelationalDescriptor(org.example.model.MyEntity --> [DatabaseTable(MYENTITY)])], could not be converted to [class java.lang.Integer]
Run Code Online (Sandbox Code Playgroud)
myinteger为了可以使用like运算符,将模型的属性更改为字符串的唯一解决方案是吗?
BR
这里是举例如何与JPA工作,这样你们可以与您的JPQL内部整数使用等。
public List<MyEntity> getMyEntities(String idStr) {
return entityManager.createQuery("SELECT m FROM MyEntity m WHERE CAST( m.id AS string ) LIKE :idStr")
.setParameter("idStr", "%" + idStr+ "%").getResultList();
}
Run Code Online (Sandbox Code Playgroud)
注:我测试了它,并能正常工作和我在一起,我使用JPA 2.1和Hibernate提供商。
JPA 不支持整数的 like(),仅支持字符串。有些数据库确实支持整数,有些则不支持。
EclipseLink 应该允许将 like() 与 Integer 一起使用(前提是您的数据库支持它)。您使用什么版本?可能需要使用 >= 2.1。如果在最新版本上失败,请记录错误。
您还可以根据您的数据库使用“CHAR、”TO_CHAR”或“CONVERT”函数将整数转换为字符串。条件 API 支持使用 function() API 来调用本机函数。
请注意,as() API 并不是用于从 Integer 转换为 String,而是用于转换为子类实体。