使用 Hibernate 在 blob 字段上应用 "like" (Mysql)
Apply "like" on blob field with Hibernate (Mysql)
我必须使用 Restrinction
的数组构建我的查询,并且我必须在 Blob 字段上应用 like
。
如果我这样做,它会起作用:
Restrictions.like("DBFieldName", object.getFieldName());
现在,我需要添加 %
,但如果我这样做:
Restrictions.like("DBFieldName", "%" + object.getFieldName());
我收到这个错误:
java.lang.ClassCastException: java.lang.String cannot be cast to java.sql.Blob
我该怎么办?
谢谢
你不能通过 Criteria 将字符串值与 blob 进行比较,因为这最后一个会尝试将字符串转换为 Blob,这是不可能的(基本上 java.sql.Blob 是一个接口)如果你真的需要做这样的比较,您唯一的解决方案是获取 Blob 值并基于它创建一个字符串,使用此示例:
byte[] bdata = blob.getBytes(1, (int) blob.length());
String text = new String(bdata);
你在 java 方面进行比较。
我必须使用 Restrinction
的数组构建我的查询,并且我必须在 Blob 字段上应用 like
。
如果我这样做,它会起作用:
Restrictions.like("DBFieldName", object.getFieldName());
现在,我需要添加 %
,但如果我这样做:
Restrictions.like("DBFieldName", "%" + object.getFieldName());
我收到这个错误:
java.lang.ClassCastException: java.lang.String cannot be cast to java.sql.Blob
我该怎么办?
谢谢
你不能通过 Criteria 将字符串值与 blob 进行比较,因为这最后一个会尝试将字符串转换为 Blob,这是不可能的(基本上 java.sql.Blob 是一个接口)如果你真的需要做这样的比较,您唯一的解决方案是获取 Blob 值并基于它创建一个字符串,使用此示例:
byte[] bdata = blob.getBytes(1, (int) blob.length());
String text = new String(bdata);
你在 java 方面进行比较。