代码之家  ›  专栏  ›  技术社区  ›  Pratap

在JPQL中将整数转换为字符串

  •  16
  • Pratap  · 技术社区  · 7 年前

        entityManager.createQuery("Select a.* from A a WHERE CAST(a.num AS TEXT) LIKE '%345%' ", A.class);
    

    其中a.num是一个整数。我想将其转换为字符串以使用类似的条件。 然而,上述转换在JPQL中不起作用。你知道我该怎么做吗?

    6 回复  |  直到 7 年前
        1
  •  16
  •   Stas Shafeev    7 年前

    你能更具体一点吗,你的问题是什么?你有什么错误吗?或者查询结果是错误的?

    session.createQuery("from MyObject where CAST(id as text) like :id").setParameter("id", "%1").getResultList();
    

    我正在使用Hibernate 5.2和Postgresql 9.5。 此外,如果您在理解错误方面有困难,可以尝试编辑hibernate。cfg。xml或任何用于使Hibernate显示其发送的查询的配置文件,方法如下:

    <property name="hibernate.show_sql">true</property>
    
        2
  •  8
  •   Hendy Irawan    7 年前

    我也有同样的需要。这应该适用于JPA 2.0和Hibernate 5.0.2:

    entityManager.createQuery(
        "Select a.* from A a WHERE CONCAT(a.num, '') LIKE '%345%' ", A.class);
    
        3
  •  6
  •   Grigory Kislin    5 年前

    从hibernate文档“cast(…as…)”,其中第二个参数是休眠类型的名称。根据列表 Hibernate Types 应该是这样的 string

    entityManager.createQuery("select a.* from A a WHERE CAST(a.num AS string) LIKE '%345%' ", A.class);
    

    Caused by: org.hibernate.QueryException: Could not resolve requested type for CAST : INT 答复

        4
  •  1
  •   S-Man    6 年前

    你可以用 to_char() select 但是,您需要选择所有 a.num 单独字段,不带 * .

    to_char() 功能,所以应该是 to_char(field, mask) ,例如我们可以提供 'FM999999999999999999' 作为掩码以接受最大可能位数。

    您的查询如下:

    Select *, to_char(a.num, 'FM999999999999999999') as num from A a WHERE num LIKE '%345%'
    

    Postgresql Data Type Formatting Functions

    EntityManager 您可以使用创建本机查询 .createNativeQuery() 方法,以下是您的代码:

    em.createNativeQuery("Select *, to_char(a.num, 'FM999999999999999999') as num from A a WHERE num LIKE '%345%'");
    
        5
  •  1
  •   Amit Jain    5 年前

        6
  •  1
  •   geisterfurz007 Haipeng Wang    4 年前

    正确的查询是:

    entityManager.createQuery("Select a.* from A a WHERE CAST(a.num AS String) LIKE '%345%' ", A.class);