`

Hibernate+DWR构建应用过程中遇到的问题

阅读更多

最近要写一个小的B/S工程,觉得往常的SSH框架实在太过沉重,故决定只用持久层的hibernate加上DWR来实现。编码过程中出现了不少问题,才发现自己的基础还不够扎实。

 

问题1   Myeclipse自动映射生成的DAO文件缺乏可用性

我使用的是Myeclipse8, 或许是我配置不好,不过就目前情况来看,通过IDE自带的映射文件生成工具生成的DAO是有错误的。因为我的项目中没加入spring,就缺少了spring的事务管理,而在这种情况下,IDE生成的DAO并没有自动加入事务,这直接导致DAO中除了“查”的方法之外,余下的方法都不能正常的执行。因此为了保证可运行,必须手动添加事务。

 

public void save(Company transientInstance) {
		log.debug("saving Company instance");
		try {
			Transaction ts = getSession().beginTransaction();
			getSession().save(transientInstance);
			ts.commit();
			log.debug("save successful");
		} catch (RuntimeException re) {
			log.error("save failed", re);
			throw re;
		}
	}

 

问题2  DWR.xml文件的设置问题

 

之前做的项目都有spring的存在,而这里没有了,因此dwr.xml文件中的<create creator="spring" javascript="CompanyManager" >的creator要从spring改成new。原来以为这样就没问题了呢,后来发现dwr会出问题,才发现除了修改creator,还需要将<param name="javabean"改成<param name="class",这样就OK了

 

问题3  自动生成的DAO中findByProperty方法出错,报ClassNotFoundException: org.hibernate.hql.ast.HqlToken

 

修正了问题1后,发现程序每次调用到findByProperty方法后都直接出现异常被捕获,(这里我的try...catch...写的不好- -,完全看不出是在哪里出的错,只知道在整个try块中有问题)。通过DEBUG,发现抛出的是ClassNotFoundException: org.hibernate.hql.ast.HqlToken异常。上网查了这个异常,绝大多数都是提到是在将hibernate3项目部署到weblogic上的时候会出现的异常,因为一个叫antlr.jar的包冲突了。我到我项目里一查看,果然有个antlr.jar的包。悲剧的是,这个包居然是锁死在整个Hibernate 3 Core Libraries中的,无法单独删除。同时,我的项目也不是部署在weblogic上而是tomcat上的啊。郁闷中偶然网上见到一个方案,让我们在Hibernate.cfg.xml中添加一个属性,尝试一下,果然奏效了,工程正常执行了~

 

添加的属性:

<property name="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</property>

 

个人觉得添加到这个属性的作用应该是设定 更改hibernate执行查询时默认调用的类 为另一个类,这样可能就绕开了对antlr.jar包的调用吧(个人感觉吧,不知道真实原因是什么- -)。

 

 

                                                                                                         by   NN     09-11-23 00:53

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics