在myeclipse10.0中 hibernate3.2和hibernate3.3他们有什么区别吗?还有spring2.5和spring3.0有什么区别?

2025-01-19 13:08:06
推荐回答(4个)
回答1:

有包冲突,

1.在搭建SSH开发平台的时候,由MyEclipse自动导入的包存在一些冲突,主要有
(1) asm.jar与asm-2.2.3.jar
asm-2.2.3是spring所依赖,而asm.jar是hibernate依赖的,应该删除asm-2.2.3.jar这个包

(2). commons-logging-1.0.4.jar与commons-logging-api-1.1.jar
这两个包中commons-logging-1.0.4.jar是spring和hibernate以及struts都要用的包,但是struts2.1以上的版本还需要commons-logging-api-1.1.jar,其实这两个包几乎一样,commons-logging-api-1.1.jar版本较新而已。

(3)异常
严重: Exception starting filter struts2
java.lang.NullPointerException
at com.opensymphony.xwork2.spring.SpringObjectFactory.getClassInstance(SpringObjectFactory.java:203)
...
可能的原因是spring的默认配置文件applicationContext.xml改了名,或者没有放在classpath的根路径下面,并且没有在web.xml文件中配置spring的监听器,解决办法在web.xml中添加


org.springframework.web.context.ContextLoaderListener


(4)异常
严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListenerorg.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/applicationContext.xml]

可能的原因是虽然配置了spring的监听器,但是没有在web.xml中配置contextConfigLocation来指定spring配置文件列表及相应的具体路径。解决的办法是在web.xml文件中添加,例如:

contextConfigLocation
/WEB-INF/csdn-spring*.xml


(5)异常
org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.GenericJDBCException: Cannot open connection
可能的原因是缺少相应的JDBC驱动包,请把驱动包拷贝到/WEB-INF/lib下面,或者是数据源的配置有问题,例如用户名、者密码或者URL错误。

(6)错误提示:Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V

解决方法如下:
当你把spring包和hibernate相应包打进项目里,然后在打包的文件里把把
asm.jar,asm-attrs.jar,cglib-2.1.3.jar三个文件从项目里导出,并删掉就OK了
原因:由于cglib-2.1.3 依赖的asm 跟在外边的asm版本不一致导致,
把cglib换成 cglib-nodep版本的就可以了

Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/spring_config/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: Serializable

ID的属性搞错了,用逆向工程重新生成一下*.hbm.xml,发现它的



generator class="native" 而之前手写的是identity

(7)错误提示:CGLIB Enhancement failed
解决:
Spring的AOP编程时,会用到这几个lib:
asm-2.2.3.jar
asm-commons-2.2.3.jar
asm-util-2.2.3.jar
cglib-nodep-2.1_3.jar

Hibernate也包含类似的包lib:
asm.jar
asm-attrs.jar
cglib-2.1.3.jar
而导致的包冲突。
只要将hibernate用到的三个包都删掉就应该没有问题了,可是正常情况下这样是解决不了问题的,因为tomcat下已经放在webapps文件夹下的包却还没有删除,所以我们要手工删除它,找到C:/Program Files/Apache Software Foundation/Tomcat 5.5/webapps/目录下,你的项目,WEB-INF文件夹,lib文件夹,将三个包删除就ok了

原因:其实是包冲突的问题。
Spring2.0 AOP Liberaries里的asm2.2.3.jar和Hiberate中的生成代理用的asm.jar冲突
把asm2.2.3.jar , asm-util-2.2.3.jar, asm-commons-2.2.3.jar 这三个包删除就可以了。。。

(8)java.lang.AbstractMethodError:com.microsoft.jdbc.base.BaseDatabaseMetaData.supportsGetGeneratedKeys()Z
说是MS SQL Server 的driver有bug:Hibernate3与SQL连接时出现的java.lang.AbstractMethodError: com.....
解决办法的不用msbase.jar、mssqlserver.jar、msutil.jar三个驱动包,而是使用jtds-1.2.5.jar,并修改更改hibernate配置文件:
原驱动连接配置:
com.microsoft.jdbc.sqlserver.SQLServerDriver jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=hibernate更改jtds连接: net.sourceforge.jtds.jdbc.Driver jdbc:jtds:sqlserver://127.0.0.1:1433;DatabaseName=hibernate
经测试确实可以,但也可能是spring和hibernate的jar包冲突的问题:
如果先为项目增加spring capability并带好Spring3.0 AOP Libraries、Spring 3.0 Core Libraries、Spring 3.0 Persistence Core Libraries、Spring 3.0 Persistence JDBC Libraries四个类库,而在添加Hibernate capability时不选这四个类库,则不会出现问题。

(9)java.lang.NoClassDefFoundError: org/objectweb/asm/Type
缺少asm.jar包,增加即可。

(10)java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter
删除cglib-*.jar和asm-*.jar删除,添加spring中的cglib-2.1.3.jar,hibernate中可能引入了cglibb-2.2.jar这个包,应该用cglib-2.1.3.jar。

(11)java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
web.xml中的struts2配置:

struts2

cn.venice.util.AuthorityFilter

AuthorityFilter类是自写的过滤类。出现这个异常的原因未知,重启了一次tomcat消失了

(12)Cannot locate the chosen ObjectFactory implementation: spring
用struts2,在struts.xml中写了

但忘了导入struts2-spring-plugin-*.jar包,导入即可。

(6)异常
javax.servlet.ServletException: Error applying decorator: null
org.apache.struts2.sitemesh.FreeMarkerPageFilter.applyDecorator(FreeMarkerPageFilter.java:164)
org.apache.struts2.sitemesh.TemplatePageFilter.applyDecorator(TemplatePageFilter.java:116)
com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:62)
org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

Struts2的sitemesh插件struts2-sitemesh-plugin-2.1.6的一个BUG,是FreeMarkerPageFilter的getLocale方法没有对invocation添加非空判断造成的,解决办法是解压包,然后找到org.apache.struts2.sitemesh.FreeMarkerPageFilter这个类,将
view plaincopy to clipboardprint?
1. protected Locale getLocale(ActionInvocation invocation, Configuration configuration) {
2. if (invocation.getAction() instanceof LocaleProvider) {
3. return ((LocaleProvider) invocation.getAction()).getLocale();
4. } else {
5. return configuration.getLocale();
6. }
7. }
修改为:
view plaincopy to clipboardprint?
1. protected Locale getLocale(ActionInvocation invocation, Configuration configuration) {
2. if (invocation != null && invocation.getAction() instanceof LocaleProvider) {
3. return ((LocaleProvider) invocation.getAction()).getLocale();
4. } else {
5. return configuration.getLocale();
6. }
7. }

回答2:

确实有区别,如果没特别需求。还是用你自己顺手的稳定的吧,除非修复bug不然你升级那版本多的功能也不见得就用的着

回答3:

有一个包冲突了,我记得是a..2.几.什么的包

回答4:

里面有的包位置改了,加了一些jar包,不过你那个怎么用这么高的版本?