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

Casting Integer to String in JPQL

我想要一个可能如下所示的 JPQL 查询:

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

其中 a.num 是一个整数。我想将其转换为 String 以使用 LIKE 标准。 但是上面的转换在 JPQL 中不起作用。关于如何实现这个的任何想法?

你能具体点吗,你的问题是什么?您是否遇到了某种错误或者查询的结果是错误的?

因为这段代码对我来说很好用:

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>

您可以在 select 子句中使用 to_char() 函数,但是,您需要 select 所有 a.num 字段分开而不是 *.

而在 postgresql 中你需要为 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%'");

正确的查询是:

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

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

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

您可以简单地使用 CAST(num as string)。它对我有用

来自 hibernate 文档,"cast(... as ...)",其中第二个参数是 Hibernate 类型的名称。根据 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 答案并进行了检查。