JAVA:NamedQuery String问题

前端之家收集整理的这篇文章主要介绍了JAVA:NamedQuery String问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
大家好,我在做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 "'")

但是,如果String中包含单引号,它将丢弃我的代码

有什么想法吗?

解决方法

我想这是因为您的数据库字段被声明为CHAR(…),因此存储的值用空格填充,而这些空格不会被=操作考​​虑在内.

因此,您可以将数据库字段声明为VARCHAR(…)或使用内置修剪函数

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

猜你在找的Java相关文章