我们正在使用PostgreSQl 9.4和Hibernate 5.1,这似乎是最新版本。我知道Postgres 9.5已经出局了,但9.4看起来并不那么古老。 我们将JPA与Hibernate 5.1一起使用并创建HQL查询。
我们在数据库中有一个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查询以使其工作。
现在,我搜索了Google,所有结果都回来了: - 无法在HQL中完成,必须使用常规的sql 但是大多数这些都是非常古老的评论,而且由于Postgres是9.4,Hibernate是5.1,我现在肯定可以通过一些例子来解决这个问题。
不幸的是,即使Postgres 9.4位操作甚至根本没有显示bitwise_and,文档也很糟糕。
在执行HQL之前,我应该将我的小数/长度转换为sql字符串中相同长度的二进制文件吗?
非常感谢任何帮助。谢谢!
答案 0 :(得分:0)
根据我在互联网上看到的内容以及各种谷歌搜索,有可能采用标准类'PostgreSQLDialect',我们将其扩展到我们自己的类:
public class MyPostgreSQLDialect extends PostgreSQLDialect
然后我们在这里添加了代码,它创建了一个特殊的'bitwise_and'函数。
我必须在Spring应用程序上下文文件中更改数据库方言,然后重新运行我的HQL查询。
我只是不知道是这种情况,因为直到以前我们根本没有进行按位检查。直到最近,我才知道我们有这个Dialect扩展。
但这解决了我们的问题。谢谢!