加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读