JAVA:NamedQuery String问题
发布时间:2020-12-14 06:04:42 所属栏目:Java 来源:网络整理
导读:大家好,我在做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_
大家好,我在做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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |