活化静止t细胞:使用 hibernate 的一个问题谁帮忙解决一下

来源:百度文库 编辑:神马品牌网 时间:2024/05/06 04:51:56
我使用的hibernate3的包 Tomcat5.5谁能解决一下 hibernate2的包加进去没有用还这样!
java.lang.NoClassDefFoundError: net/sf/ehcache/CacheException
java.lang.Class.getDeclaredConstructors0(Native Method)
java.lang.Class.privateGetDeclaredConstructors(Class.java:2328)
java.lang.Class.getConstructor0(Class.java:2640)
java.lang.Class.newInstance0(Class.java:321)
java.lang.Class.newInstance(Class.java:303)
org.hibernate.cfg.SettingsFactory.createCacheProvider(SettingsFactory.java:327)
org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:219)
org.hibernate.cfg.Configuration.buildSettings(Configuration.java:1881)
org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1174)
com.oa.factory.HibernateSessionFactory.currentSession(HibernateSessionFactory.java:49)
com.oa.action.TestAction.execute(TestAction.java:54)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

如果你使用的是hibernate3的包,是不能使用net.sf下的包的,因为hibernate3都改成了org包

hibernate2 升级为hibernate3的需要注意的事项将所有程序中的net.sf.hibernate替换为org.hibernate.net.sf.hibernate.expression.Expression换为org.hibernate.criterion.Expression还有就是把.hbm中的hibernate-mapping-2.0.dtd替换为hibernate-mapping-3.0.dtdHibernate Mapping DTD 2.0替换为Hibernate Mapping DTD 3.0 hibernate.cfg.xml中Hibernate Mapping DTD 2.0替换为Hibernate Mapping DTD 3.0<property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>选择自 chinaewolf 的 Blog hibernate2 升级为hibernate3的需要注意的事项(chinaewolf的工作日记)目的,主要是那当前的项目练手,熟悉一下hibernate2和hibernate3的差别,给当前项目一点扩展的空间. 1.首先将hibernate2.jar替换为hibernate3.jar(hibernate-3.0.5)hibernate-tools.jar也替换成新的(从hibernate-tools-3.0.0.alpha4a找出来的)2.将所有程序中的net.sf.hibernate替换为org.hibernate. 3.但是有例外net.sf.hibernate.expression.Expression换为org.hibernate.criterion.Expression如果用eclipse,用ctrl+shift+o快捷键可以加快速度:) 4.在使用hql查询时将createSQLQuery(hql,"c",EZCampaignDTO.class);改为createSQLQuery(hql).addEntity("c",EZCampaignDTO.class); 5.在批量插入时将原来的int size = ((SessionFactoryImpl)(session.getSessionFactory())).getJdbcBatchSize()改为int size = ((SessionFactoryImpl)(session.getSessionFactory())).getSettings().getJdbcBatchSize(); 6.在计算count时将原来的int size = ((Integer) session.iterate(hql).next()).intValue();改为int size = ((Integer) session.createQuery(hql).iterate().next()).intValue();其中hql="select count(*) from " + DAOVar.contactClass; 7.还有就是把.hbm中的hibernate-mapping-2.0.dtd替换为hibernate-mapping-3.0.dtdHibernate Mapping DTD 2.0替换为Hibernate Mapping DTD 3.0 8.hibernate.cfg.xml中Hibernate Mapping DTD 2.0替换为Hibernate Mapping DTD 3.0<property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property> 9.hibernate.properties中类似 10.cache-config.xml中<provider className="net.sf.hibernate.cache.OSCacheProvider"/>替换为<provider className="org.hibernate.cache.OSCacheProvider"/> 11.classeshibernate.properties中hibernate.cache.provider_class=org.hibernate.cache.EhCacheProviderhibernate.dialect=org.hibernate.dialect.SQLServerDialect晕s了,怎么这里还有还是用编辑器暴力替换一下吧干脆 然后部署,集成测试,希望一切ok结果咣铛,还是报错 12.在自动外部模块部分有一个功能是根据模版自动生成.hbm文件在load,结果出来的.hbm中有问题:生成的 <composite-id unsaved-value="any" mapped="false">其中mapped="false" 出错.找了半天才发现在网上的hibernate-mapping-3.0.dtd文件有支持mapped="false"这个属性.而本地的hebernate3.0.5中的hibernate-mapping-3.0.dtd文件没有这个属性.晕,hibernate也太不负责了吧. 解决办法把hibernate-mapping-3.0.dtd copy到jbossin目录下然后,在template文件中<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "hibernate-mapping-3.0.dtd">然后他会在jbossin目录下读取该文件 13.重新测试,还是咣铛发现子类读父类数据时抛出异常"org.hibernate.LazyInitializationException: could not initialize proxy"延迟抓取出的错,hb3对many-to-one的默认处理是lazy = "proxy"没有搞懂到底怎么回事,把所有many-to-one,one-to-one都加上lazy="false"再测试终于大功告成

恐怕只能加一个流水号作主键了。hibenate应该是需要一个主键字段定位的。