-
HQL动态查询使用方法
普通类 -
- 支持
- 批判
- 提问
- 解释
- 补充
- 删除
-
-
为什么建议使用动态查询
静态查询常会遇到特殊字符问题,比如 查询的内容中包含英文单引号,就会报错,如:
org.hibernate.QueryException: expecting ''', found '<EOF>' [from com.uisk.hep.bo.lc.TagClustered where tagName='Teachers'']
比如语义基因抽取类中的isInDomainOntology方法:
if(disciplineIds==""){//若ko没有关联学科,则匹配所有本体库
hql="from KnowledgeType as kt where kt.title='"+word+"'";
}else{
hql="from KnowledgeType as kt where kt.title='"+word+"' and ("+tmpStr+")";
}
KnowledgeType kt=(KnowledgeType) DbOperator.getTopEntity(hql);如果word=let',包含单引号,就会报错。
-
解决方法:使用动态查询
将所有查询字段的内容使用hashmap存储起来,hibernate会自动完成转移字符处理。
if(disciplineIds==""){//若ko没有关联学科,则匹配所有本体库
hql="from KnowledgeType as kt where kt.title=:word";
}else{
hql="from KnowledgeType as kt where kt.title=:word and ("+tmpStr+")";
}
HashMap params=new HashMap();
params.put("word", word);
KnowledgeType kt=(KnowledgeType) DbOperator.getTopEntity(hql, params); -
-
- 标签:
- kt.title
- 查询
- hql
- 使用方法
- 使用
- 所有
- 39
- kt
- knowledgetype
- word
- hashmap
- 动态查询
-
学习元评论 (0条)
聪明如你,不妨在这 发表你的看法与心得 ~