JAVA: NamedQuery 字符串问题

标签 java jpa jpql named-query

大家好,我在执行 NamedQuery 时遇到了一些精确匹配的问题。

我目前正在使用这样的东西:

@NamedQuery(name = MyClass.GET_ENTRY_BY_NAME, query = "select e from Entry e where e.name =:"+ Entry.NAME )

...

Query query = em.createNamedQuery(MyClass.GET_ENTRY_BY_NAME);
        query.setParameter(Entry.NAME, myEntry.getName());

它适用于大多数情况,但我注意到,如果用户传递的文件名末尾有一个空格,则 namedQuery 会忽略该字符。例如:

Query query = em.createNamedQuery(MyClass.GET_ENTRY_BY_NAME);
        query.setParameter(Entry.NAME, myEntry.getName()+ " ");

将返回与之前查询相同的结果。绕过我的“有效输入”验证。换句话说,我希望查询不返回任何条目,稍后再处理错误。

我能想到的一个解决方法是在 namedQuery 中将我的参数用单引号括起来,如下所示:

@NamedQuery(name = MyClass.GET_ENTRY_BY_NAME, query = "select e from entry e where e.name =':"+ Entry.NAME "'")

但是,如果字符串中包含单引号,它会破坏我的代码...

有什么想法吗?

最佳答案

我猜这是因为您的数据库字段被声明为 CHAR(...),因此存储的值用 = 未考虑的空格填充> 操作。

因此,您可以将数据库字段声明为 VARCHAR(...) 或使用内置的 trim 函数:

query = "select e from Entry e where trim(trailing from e.name) =:"+ Entry.NAME

关于JAVA: NamedQuery 字符串问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3494381/

相关文章:

java - java.sql.SQLException : [Microsoft][ODBC Microsoft Access > Driver] Too few parameters. 预期 1

java - 什么时候在 Java 中使用可变参数?

java - JPA PrePersist 和 PreUpdate

java - JPA 外键约束违规无法插入 Null

spring - JPQL 多对多 - in 子句

java - 创建名称为 'restHandlerMapping' 的 bean 时出错,缺少路径映射。 bean 'repositoryController' 必须映射到非空路径

java - 收到的数据比预期多

jpa - 使用 micronaut-data-hibernate-jpa 库连接到 jpa 时出现错误

java - 如何将 Hashmap 传递给 spring data jpa 方法并在更新语句中使用它?

java - 有没有办法对我的 JPQL 查询尝试的 WHERE 条件进行排序?