Wir verwenden PostgreSQl 9.4 und Hibernate 5.1, die die neuesten Versionen zu sein scheinen. Ich weiß, dass Postgres 9.5 draußen ist, aber 9.4 scheint nicht so alt zu sein. Wir verwenden JPA mit Hibernate 5.1 und erstellen HQL-Abfragen.Wie funktioniert bitwise_and in Postgres 9.4 und Hibernate 5
Wir haben ein Feld in der Datenbank, das ein bigint ist. Dies ist eine Bitmaske für uns, gespeichert als Integer. Im Java-Code funktioniert das großartig, aber wenn wir nach Bitmasken suchen wollen, funktioniert es nicht.
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.
Ich bin auf der generierten Hibernate SQL suchen und ich kann sehen, dass wir so etwas wie:
bitwise_and(mytable_.actionbitmask, 2)>0
So, würde Ich mag die rohe SQL bekommen zuerst zu arbeiten, und dann Ich kann meine HQL-Abfrage optimieren, damit das auch funktioniert.
Jetzt habe ich gesucht Google und alle Ergebnisse wieder mit: - nicht in HQL getan werden kann, haben regulären sql verwenden, aber die meisten von ihnen sind sehr alt Kommentare und seit Postgres ist 9,4, Hibernate ist 5.1, ich denke jetzt sicherlich können wir das mit einigen Beispielen herausfinden.
Leider zeigen selbst die Postgres-9,4-Bit-Operationen nicht einmal bitwise_and überhaupt, die Dokumentation saugt nur dort.
Sollte ich meine Dezimalstellen/Longs in Binärdateien der gleichen Länge in der SQL-Zeichenfolge konvertieren, bevor ich die HQL ausführen?
Jede Hilfe würde sehr geschätzt werden. Vielen Dank!
Wo finden Sie im Handbuch (https://www.postgresql.org/docs/9.4/static/index.html) 'bitwise_and'? Außerdem: bearbeite deine Frage und füge die ** complete ** SQL-Anweisung hinzu. Im Allgemeinen besteht die Natur einer Verschleierungsebene darin, dass Sie keine DBMS-spezifischen Dinge verwenden können. Sie setzen sich auf den kleinsten gemeinsamen Nenner für SQL-Funktionen. –