您的位置:首页 > 编程语言 > Java开发

解决Hibernate中自动生成的findByProperty函数无法工作的问题-java SSH整合系列

2016-06-25 12:45 543 查看
我先说一下我的问题现象:

1.直接在Query queryObject = getSession().createQuery(queryString);那里报NoSuchMethodError异常。

(这种异常大多数为jar包冲突,系统不知道用哪一个jar包而报的异常,解决办法很简单,删除名称一致,版本较低的jar包。)

2.没有报异常,但是findByProperty函数要么返回null,要么返回size为0的集合。

3.将hql转换为sql语句到数据库软件上是可以查询到的结果的,但是用getSession().createQuery或者getSession().createSQLQuery始终不能用。

如果发生类似的问题呢,不要急,马上帮你解决。

findByProperty函数由Hibernate自动生成,所以不用怀疑是代码的问题。

try {
String queryString = "from Town as model where model."
+ propertyName + "= ?";
Query queryObject = getSession().createQuery(queryString);
queryObject.setParameter(0, value.toString());
return queryObject.list();

} catch (RuntimeException re) {
log.error("find by property name failed", re);
throw re;

}

1.查看部署后的网站目录下的\WEB-INF\lib下面是否有2个antlr-2.x.x.jar 文件。

如果是的话,恭喜你,就是它的原因了,因为有2个jar文件,导致了这个问题。解决办法也很简单:

你可以直接在lib下面删除低版本的antlr.jar文件。然后重新启动服务器,检查运行结果,不出意外的话,因该是你期望的结果啦。

找到问题所在后接下来就要以防后患了,因为这里面一个antlr.jar来自Hibernate,一个来自Struts2,所以解决办法:导出你的低版本的antlr.jar(我的是struts2的)所在的 Library目录下的所有jar文件到一个文件夹,新建一个User Library命名为SSH_Struts2 Library。把需要的jar包(这里肯定就不要antlr.jar了)导入自己的User
Library。然后将Myeclipse系统的Library移除,换成我们的User Library。

这种方法可以解决所有的jar重复的问题,其次重复的远远不止这一个jar包,还有很多,如果不及时解决掉,会有很多意想不到的结果,所以在SSH整合的时候,大家要多查阅资料,避免不必要的重复,要宁可少加,不能多加。

2.如果上述问题解决不适合你,那么你的问题就很陌生了,你要检查你的函数参数的类型是否匹配,检查是否是懒加载,主要的还是一步一步调试,找到异常详细信息,和发生异常的代码段,相信你也会很快找到解决办法的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息