对字节应用SQL“LIKE”

对字节应用SQL“LIKE”,sql,hibernate,Sql,Hibernate,我必须用hibernate创建一个可以以通用方式工作的DAO,这意味着根据属性类型执行一些查询 当筛选任何类的字符串属性时,我的泛型DAO都可以正常工作,它接受包含、以开始、以使用类似限制结束: 限制。如属性名、字符串值、getMatchMode 我的问题是,我还需要创建一个类似的contains,以bytes[]属性开头,以bytes结尾的hibernate SimpleExpression,如字符串属性名称、对象值 api不工作可能完全不工作,所以我想也许我可以将存储在DB中的字节转换成字符

我必须用hibernate创建一个可以以通用方式工作的DAO,这意味着根据属性类型执行一些查询

当筛选任何类的字符串属性时,我的泛型DAO都可以正常工作,它接受包含、以开始、以使用类似限制结束:

限制。如属性名、字符串值、getMatchMode

我的问题是,我还需要创建一个类似的contains,以bytes[]属性开头,以bytes结尾的hibernate

SimpleExpression,如字符串属性名称、对象值

api不工作可能完全不工作,所以我想也许我可以将存储在DB中的字节转换成字符串,然后通过解决方法应用正常的字符串限制,比如api

问题是,我认为没有标准的方法将bytes[]转换为String,因为DB平台中没有标准的数据类型,我的意思是,Oracle使用RAW,hsql使用VARBINARY,等等,例如Oracle使用自己的RAWTOHEX

或者,如果你们中有人知道如何解决这个问题,我们将非常欢迎

干杯

///在MySQL中,您可以使用十六进制将二进制文件转换为字符串。i、 e

SELECT
  *
FROM
  myTable
WHERE
  HEX(myBinaryField) LIKE 'abc%'`

在Java代码中,可以使用一些Base64编码器,将字节转换为字符串。然后,您可以只保留Base64编码的字符串,并使用普通查询。也许不是最有效的方法,但它应该可以很好地工作。

感谢您的帮助,问题是我无法更改架构。类似这样的内容如何:从myTable中选择*其中HEXmyBinaryField类似于“abc%”。这在MySQL中工作。它将二进制字段转换为字符串,然后使用该字符串执行类似的查询。是的,但我必须为每种方言创建一个查询,我想没有选择:干杯!还有一种方法:使用CASTmyBinaryField作为CHAR,但结果在我的测试中包含很多问号。