次のような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>
私も同じ必要があります。これは、JPA 2.0およびHibernate 5.0.2で動作するはずです。
entityManager.createQuery(
"Select a.* from A a WHERE CONCAT(a.num, '') LIKE '%345%' ", A.class);
to_char()
関数をselect
句で使用できますが、_a.num
_ではなく、すべての_*
_フィールドを個別に選択する必要があります。
そしてpostgresqlではto_char()
functionのマスクを指定する必要があるため、to_char(field, mask)
になります。たとえば、可能な最大桁数を受け入れるためのマスクとして_'FM999999999999999999'
_を指定できます。
クエリは次のようになります。
_Select *, to_char(a.num, 'FM999999999999999999') as num from A a WHERE num LIKE '%345%'
_
詳細については、 PostgresqlData Type Formatting Functions を参照してください。
EntityManager
を使用してコードにクエリを書き込むには、.createNativeQuery()
メソッドを使用してネイティブクエリを作成できます。これがコードの例です。
_em.createNativeQuery("Select *, to_char(a.num, 'FM999999999999999999') as num from A a WHERE num LIKE '%345%'");
_
正しいクエリは次のとおりです。
Hibernateドキュメントから、 "cast(... as ...)"。2番目の引数はHibernateタイプの名前です。 Hibernate Types のリストによると、これはstring
でなければなりません(大文字と小文字が区別されます!)。
したがって、リクエストは次のようになります。
entityManager.createQuery("select a.* from A a WHERE CAST(a.num AS string) LIKE '%345%' ", A.class);
原因:org.hibernate.QueryException:CASTの要求されたタイプを解決できませんでした:INT 回答。