Java 使用QueryDSL在LOB字段中搜索文本字符串

Java 使用QueryDSL在LOB字段中搜索文本字符串,java,sql,querydsl,Java,Sql,Querydsl,我目前正在使用QueryDSL,我必须添加一个WHERE子句,通过存储大量信息(可读文本)的字段进行筛选,并将其创建为LOB字段 这是我的实体中的字段: @Lob @Column(name = "MY_FIELD", nullable = true) private byte[] myField; 在我的“Q”类中以这种方式生成: 使用前面的谓词生成的SQL代码如下所示: ... WHERE MY_FIELD like '%?%' escape '!' ... 如

我目前正在使用QueryDSL,我必须添加一个
WHERE
子句,通过存储大量信息(可读文本)的字段进行筛选,并将其创建为LOB字段

这是我的实体中的字段:

@Lob
@Column(name = "MY_FIELD", nullable = true)
private byte[] myField;
在我的“Q”类中以这种方式生成:

使用前面的谓词生成的SQL代码如下所示:

...
WHERE
    MY_FIELD like '%?%' escape '!'
...
如果我尝试直接在数据库中执行此SQL命令,它会正常工作,它会根据“”参数恢复正确的行。但是,我的应用程序不会恢复它们中的任何一个,即使它正在执行完全相同的SQL命令

我有什么遗漏吗?能不能换一种方式

事先非常感谢


PS:我正在使用SQL Server 2011。

默认情况下,
字节[]
映射到数组路径。对于(C)LOB,您希望将其映射为字符串路径。通过指定
QueryType
,可以提示代码生成器:

@Lob
@QueryType(PropertyType.STRING)
@列(name=“MY_FIELD”,null=true)
私有字节[]myField;

然而,
@Column(name=“MY_FIELD”,nullable=true)
似乎暗示您正在查询JPA而不是普通SQL。请注意,一些JPA供应商可能不支持CLOB的
like
功能。

如果我以这种方式映射字段,则会出现以下错误:参数值[abc]与预期类型[[B(n/a)]不匹配,我不确定Hibernate(大概)是否可以处理
byte[]的
like
字段。验证您是否可以在不使用querydsl的情况下编写JPQL查询,并查看其是否实际执行。否则,我建议将该字段映射到
字符串或
Clob
。在这种情况下,我从Hibernate得到的是一个“错误的列类型”错误。我最后做的是创建一个带有Clob强制字段
(转换)的视图(VARCHAR(max),我的_字段,0))
并使用它代替原来的LOB字段。我知道这不是最好的,但我没有找到其他方法。非常感谢您的帮助。
Expressions.predicate(Ops.LIKE, Expressions.stringPath("MY_FIELD"), Expressions.constant(stringValue));
...
WHERE
    MY_FIELD like '%?%' escape '!'
...