大家好,我在做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中包含单引号,它将丢弃我的代码…
有什么想法吗?