在 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 答案并进行了检查。
我想要一个可能如下所示的 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 答案并进行了检查。