hibernate hql中的like问题

hibernate hql中的like问题,hibernate,netbeans,hql,Hibernate,Netbeans,Hql,我正在开发一种方法,将查询中的条件研究和条件值开头的文本作为参数,但每次我测试它时,都会得到一个空列表,我需要一些帮助 public ArrayList<Article> getArticleByCritere(String critere, String txt){ ArrayList list = new ArrayList<Article>(); list=null; Stri

我正在开发一种方法,将查询中的条件研究和条件值开头的文本作为参数,但每次我测试它时,都会得到一个空列表,我需要一些帮助

public ArrayList<Article> getArticleByCritere(String critere, String txt){
               ArrayList list = new ArrayList<Article>();
               list=null;
               String cr;
        try {
            this.session = HibernateUtil.getSessionFactory().openSession();
            org.hibernate.Transaction tx = session.beginTransaction();

        if(critere.equals("Référence"))
            cr="refa";
        else if(critere.equals("Désignation"))
            cr="designation";
        else if(critere.equals("Famille"))
            cr="famille";
        else if(critere.equals("Code"))
            cr="codeArticle";
        else
            cr = "sousFamille";
        String query = "from Article where :critere like :debut";
       list = (ArrayList<Article>) session.createQuery(query).setString("critere", cr).setString("debut", txt + "%").list();
              tx.commit();
            System.out.println("ok");
            session.close();
        } catch (Exception e) {
            System.out.println(" getArticleByFamDesign a échoué" + e);
        }
        return list;
          }
could any one help me to find what's the problem here !!
publicArrayList getArticleByCritere(stringCritere,stringTXT){
ArrayList=新建ArrayList();
列表=空;
字符串cr;
试一试{
this.session=HibernateUtil.getSessionFactory().openSession();
org.hibernate.Transaction tx=session.beginTransaction();
如果(标准等于(“Référence”))
cr=“refa”;
else if(标准等于(“签名”))
cr=“指定”;
否则,如果(标准等于(“家庭”))
cr=“家庭”;
else if(标准等于(“代码”))
cr=“codeArticle”;
其他的
cr=“sousFamille”;
String query=“来自文章where:critere-like:处子秀”;
list=(ArrayList)session.createQuery(query).setString(“critere”,cr).setString(“首秀”,txt+“%”)。list();
tx.commit();
System.out.println(“ok”);
session.close();
}捕获(例外e){
System.out.println(“getArticleByFamDesign aéchoué”+e);
}
退货清单;
}
有人能帮我找到这里的问题吗!!

您始终可以将值作为查询参数传递。不能传递查询的rando部分,例如列名

因此,代码应该是:

String query = "from Article where " + cr + " like :debut";
list = (List<Article>) session.createQuery(query)
                              .setString("debut", txt + "%")
                              .list();
首先,此时不需要声明列表。只在你需要的时候申报。 其次,不应该使用原始类型。始终指定集合的泛型类型。 第三,创建一个新的ArrayList对象,然后通过将
list
重新初始化为null将其扔到垃圾箱,这有什么意义

最后,您的异常处理非常糟糕。只有当您可以做一些有意义的事情来解决问题时,才能接受异常。返回null而不是实际结果比让异常传播要糟糕得多。现在您不知道为什么会得到null,而且因为您甚至还没有打印异常,所以您甚至无法诊断问题可能是什么

中介绍了处理异常、事务和会话的方法。会话应该在finally块中关闭,以绝对确保它已关闭。不关闭它将使数据库连接永远打开。这样做50次,您的应用程序将无法再连接到数据库

ArrayList list = new ArrayList<Article>();
list = null;