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;