JPA Like Integer运算符

时间:2011-04-04 06:05:37

标签: java jpa

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

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

4 个答案:

答案 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;

    ...
}

我知道这是一个很老的帖子,但是如果它可以帮助别人的话!