2016-07-21 9 views
0

私たちはPostgreSQl 9.4とHibernate 5.1を使用していますが、これはやや最新のバージョンと思われます。私はPostgres 9.5が出ていることを知っていますが、9.4はあまり古くないようです。 JPAとHibernate 5.1を使用し、HQLクエリを作成します。Bitwise_andはPostgres 9.4とHibernate 5でどのように動作するのですか

データベースにbigintのフィールドがあります。これは私たちのためのビットマスクであり、整数として格納されています。 Javaコードでは、これはうまく動作しますが、ビットマスクをチェックしたいときは動作しません。

ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper - 
ERROR: function bitwise_and(bigint, integer) does not exist 
Hint: No function matches the given name and argument types. 
You might need to add explicit type casts. 

私は、生成HibernateのSQLを見ていると私たちは何か持っていることがわかります。だから、

bitwise_and(mytable_.actionbitmask, 2)>0 

を、私が最初に動作するように生のSQLを取得したいし、次にしたいです私はその仕事をするために私のHQLクエリを微調整することもできます。 、HQLで行うことができない、通常のSQL を使用する必要があります。しかし、これらのほとんどは、非常に古いコメントで、Postgresは9.4であるから - :

は今、私がグーグルを検索しました、そして、すべての結果がで戻ってきますHibernateは5.1ですが、私は確かにこれでいくつかの例を挙げて考えることができます。

残念ながら、Postgresの9.4ビット操作でさえ、bitwise_と全く表示されなくても、ドキュメントはちょうどそこを吸うだけです。

HQLを実行する前に、小数点/ロングを同じ長さのバイナリに変換する必要がありますか?

ご協力いただければ幸いです。ありがとう!

+0

[マニュアルの](https://www.postgresql.org/docs/9.4/static/index.html)で 'bitwise_and'を見つけましたか?また、あなたの質問を編集し、** complete ** SQL文を追加してください。しかし、一般に、難読化レイヤの性質は、DBMS固有のものを使用することができないということです。それらは、SQL機能のための最小限の共通点を定めています。 –

答えて

0

私はインターネットやさまざまなGoogle検索で見たものに基づいて、標準クラスを取るために月がある「PostgreSQLDialect」と私たちは私たち自身のクラスにそれを拡張:

public class MyPostgreSQLDialect extends PostgreSQLDialect 

私たちは、その後のコードを追加しましたここで特別なbitwise_and関数を作成しました。

Springアプリケーションコンテキストファイルでデータベースダイアレクトを変更して、HQLクエリを再実行する必要がありました。

これまでのところ、私たちはビット単位のチェックを一切していなかったので、これが当てはまるとは分かりませんでした。直前までDialectの拡張機能があったのかどうかはわかりませんでした。

しかし、これは私たちの問題を解決しました。ありがとう!

関連する問題