• 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条)

    评论为空
    聪明如你,不妨在这 发表你的看法与心得 ~



    登录之后可以发表学习元评论
      
暂无内容~~
顶部