我希望有一个看起来像这样的JPQL查询:
entityManager.createQuery("Select a.* from A a WHERE CAST(a.num AS TEXT) LIKE '%345%' ", A.class);
其中a.num是一个整数。我想将此转换为String以使用LIKE条件。 但是上面的转换在JPQL中不起作用。关于如何实现这个的任何想法?
答案 0 :(得分:6)
你能更具体一点,你的问题是什么?您是否有某种错误,或者查询结果是错误的?
因为这段代码适合我:
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 show查询:
<property name="hibernate.show_sql">true</property>
答案 1 :(得分:4)
我也有同样的需要。这适用于JPA 2.0和Hibernate 5.0.2:
entityManager.createQuery(
"Select a.* from A a WHERE CONCAT(a.num, '') LIKE '%345%' ", A.class);
答案 2 :(得分:0)
您可以在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%'");
答案 3 :(得分:0)
正确的查询是: entityManager.createQuery(“从一个WHERE CAST(a.num AS String)中选择一个。* LIKE'%345%'”,A.class);
答案 4 :(得分:0)
您可以简单地使用CAST(数字作为字符串)。对我有用
答案 5 :(得分:0)
从休眠文档“ cast(... as ...)”开始,其中第二个参数是Hibernate类型的名称。根据{{3}}的列表,它应该为string
(区分大小写!)。
因此请求应为:
entityManager.createQuery("select a.* from A a WHERE CAST(a.num AS string) LIKE '%345%' ", A.class);
从Hibernate Types答案中获取并检查。