【发布时间】:2021-03-09 12:32:58
【问题描述】:
我目前正在使用 QueryDSL,我必须添加一个 WHERE 子句来按存储大量信息(可读文本)的字段进行过滤,并将其创建为 LOB 字段。
这是我实体中的字段:
@Lob
@Column(name = "MY_FIELD", nullable = true)
private byte[] myField;
这是在我的“Q”类中以这种方式生成的:
public final ArrayPath<byte[], Byte> myField = createArray("myField", byte[].class);
我可以毫无问题地恢复该字段中的信息。但是,当我尝试添加过滤子句时,我意识到ArrayPath 对象没有like 方法,因此我尝试以不同的方式进行。
我尝试了不同的方法,我想出了这个:
Expressions.predicate(Ops.LIKE, Expressions.stringPath("MY_FIELD"), Expressions.constant(stringValue));
上一个谓词生成的SQL代码如下:
...
WHERE
MY_FIELD like '%?%' escape '!'
...
如果我尝试直接在我的数据库中执行此 SQL 命令,它会完美运行,它会根据“?”恢复正确的行。参数。然而,我的应用程序没有恢复它们中的任何一个,即使它正在执行相同的 SQL 命令。
我有什么遗漏吗?可以换一种方式吗?
非常感谢您。
PS:我使用的是 SQL Server 2011。
【问题讨论】: