具有整数的JPA Like运算符

ree*_*een 4 java jpa

有人可以告诉我,这为什么不起作用:

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

mib*_*iti 6

这里是举例如何与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提供商。


Jam*_*mes 5

JPA 不支持整数的 like(),仅支持字符串。有些数据库确实支持整数,有些则不支持。

EclipseLink 应该允许将 like() 与 Integer 一起使用(前提是您的数据库支持它)。您使用什么版本?可能需要使用 >= 2.1。如果在最新版本上失败,请记录错误。

您还可以根据您的数据库使用“CHAR、”TO_CHAR”或“CONVERT”函数将整数转换为字符串。条件 API 支持使用 function() API 来调用本机函数。

请注意,as() API 并不是用于从 Integer 转换为 String,而是用于转换为子类实体。