有人可以告诉我,为什么这不起作用:
criteria.add(cb.like((myentity.<Integer>get("integerid")).as(String.class), "2%"))
我收到以下错误:
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]
唯一的解决方案是将myinteger
属性更改为模型中的字符串,以便我可以使用like
运算符吗?
BR
答案 0 :(得分:5)
以下是如何使用JPA的示例,因此您可以在JPQL中使用LIKE和整数。
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();
}
注意:我测试了它并且和我一起工作正常,我正在使用JPA 2.1 Hibernate提供程序。
答案 1 :(得分:3)
JPA不支持使用Integers的like(),只支持字符串。有些数据库支持像整数,有些则不支持。
EclipseLink应允许在Integer中使用like()(假设您的数据库支持它)。你用的是什么版本?可能需要使用&gt; = 2.1。如果它在最新版本上失败,那么请记录一个错误。
您还可以使用“CHAR”,“TO_CHAR”或“CONVERT”函数将整数转换为字符串,具体取决于您的数据库。条件API支持函数()API来调用本机函数。
请注意,as()API不是用于从Integer转换为String,而是用于转换为子类实体。
答案 2 :(得分:1)
我的猜测:您正在尝试将一个String放在integerId中,这是一个整数。
此外,不可能在整数值上使用。
将String.class更改为Integer.class。和“2%”整数值
答案 3 :(得分:1)
我遇到了同样的问题。我使用JPA2.0和EclipseLink 2.3作为实现。
列 codeClient 实际上是我的数据库中的一个整数。
注释@Convert只是将我的Integer列转换为String列。
通过这种方式,我可以使用类似谓词而不是数字。
@Entity
@Table(name="COLIS_SO_VM")
public class Colis implements Serializable {
...
@Convert
private String codeClient;
...
}
我知道这是一个很老的帖子,但是如果它可以帮助别人的话!