hibernate连接在spring MVC中出错

我用hibernate查询数据库里面的数据,在junit里面能查询到,但打开服务器后再spring mvc里面的controller里面就出错了。怎么回事,一样的代码,为什么hibernate里面能运行,mvc里面就出错
最新回答
萌音草莓

2024-04-29 14:49:10

spring+hibernate出错小结:

(1)java.lang.NoClassDefFoundError: org/hibernate/context/CurrentSessionContext
原因:出现这错误时,请更改hibernate的包,更新至最新或3.1以上
(2)java.lang.NoClassDefFoundError: javax/transaction/TransactionManager

原因:缺少jta.jar 或者是找不到hbm.xml文件导致sessionfactory出错,检查hbm文件路径是否正确,文件是否存在
(3) 错误:
Exception in thread "main" org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
或者org.springframework.jdbc.BadSqlGrammarException: Hibernate operation: could not insert: [com.yourcompany.model.Login]; bad SQL grammar [insert into mysql__login (name, password) values (?, ?)]; nested exception is java.sql.SQLException: Table 'mysql.mysql__login' doesn't exist java.sql.SQLException: Table 'mysql.mysql__login' doesn't exist

原因与解决:因为Hibernate Tools(或者Eclipse本身的Database Explorer)生成*.hbn.xml工具中包含有catalog="***"(*表示数据库名称)这样的属性,将该属性删除就可以了

(4)org.springframework.orm.hibernate3.HibernateQueryException: undefined alias

原因:在spring配置文件中,可能你设置了<prop key="hibernate.query.factory_class">
org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop>,指定了HQL的解释器,请删除或更改另一个解释器org.hibernate.hql.ast.ASTQueryTranslatorFactory, 如果没有设置,请确认是否有写错了HQL语句,是否与POJO里的属性一样。注意区分大小写。

(5)quartz报错: Caused by: java.lang.NoSuchMethodError:
org.apache.commons.collections.SetUtils.orderedSet(Ljava/util/Set;)Ljava/util/Set;

原因是由于使用的commons-collections.jar版本太低导致的要使用3.*的才行,下载地址为:
http://commons.apache.org/downloads/download_collections.cgi

选Binary下的zip下载,下载后将里的的commons-collections-x.x.x.jar放置到你的classpath里即可。记得删除旧的那个jar包

(6)org.springframework.beans.factory.CannotLoadBeanClassException:
Cannot find class [com.mchange.v2.c3p0.ComboPooledDataSource] for bean

这是因为你的sping配置文件是使用c3p0作数据池,而你的classpath里没有找到这个c3p0的jar包而导致的,下载一个jar导入classpath即可。
地址为:
http://sourceforge.net/project/showfiles.php?group_id=25357&package_id=88527
,如果是windows的就选择zip的下载。

(7)The Network Adapter could not establish the connection

请检查你的url,user,pwd,dialect等等是否正确

(8)java.lang.NoClassDefFoundError: org/hibernate/cfg/HbmBinder$SecondPass

原因:你更新了hibernate3.2的包,但你的classpath里可能存在hibernate-annotations.jar的包,删除之或更新至最新版本的包即可。

(9)java.lang.IllegalAccessError: tried to access method net.sf.ehcache.CacheManager.<init>()V from class org.hibernate.cache.EhCacheProvider

原因:可能你更新了hiberante的包,导致原来的原来ehcache不行了,原来使用的是1.1的版本,换成1.5以上的正常,另还需要一个javassist.jar包

(10)Connections could not be acquired from the underlying database

大概的意思是说:不能连接当前所配置的数据库,检查你的URL链接字符串是否正确。

(11) org/apache/commons/pool/impl/GenericObjectPool 的解决方法

java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool原因:
找不到 Caused by:
java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
就是Apache所提供的基本对象池。
解决:
到这里
http://commons.apache.org/downloads/download_pool.cgi
下载包,然后,把里面的commons-pool-x.jar复制到myEclipse的Referenced Libraries下.

(12)错误提示:java.lang.NoClassDefFoundError:
org/apache/commons/collections/LRUMap类没找到,
或org/apache/commons/collections/SequenceHashMap类没找到:

工程里的commons-collections.jar包与其它包不匹配导致的,例如如果你用
commons-beanutils-1.7.0.jar,commons-collections-3.2.jar时会出现你的那种问题,如果是commons-beanutils-1.7.0.jar,commons-collections-3.1.jar就不会就这种问题了...祝你好运啦

(13)Spring2.0与Hibernate3.0的错误解决
严重: action: null
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'sessionfactory' defined in ServletContext resource [/WEB-INF/beans-config.xml]: Initialization of bean failed; nested exception is java.lang.SecurityException:
class "org.apache.commons.collections.SequencedHashMap"'s signer information does not match signer information of other classes in the same package
java.lang.SecurityException: class "org.apache.commons.collections.SequencedHashMap"s signer information does not match signer information of other classes in the same package
at java.lang.ClassLoader.checkCerts(ClassLoader.java:775)
at java.lang.ClassLoader.preDefineClass(ClassLoader.java:487)
at java.lang.ClassLoader.defineClass(ClassLoader.java:614)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) at
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1817)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:872).........

Spring2.0 AOP Liberaries里的asm2.2.3.jar和Hiberate中的生成代理用的asm.jar冲突,后来把asm2.2.3.jar删了才好使

或者
java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitor
java.lang.NoClassDefFoundError: org/objectweb/asm/commons/EmptyVisitor
java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit
java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V

这个错误是因为系统需要一个叫“asm.jar”的包,而这个包在SpingAop包中和Hibernate包中都有,而且不象话的是这两个包中的类org.objectweb.asm.ClassVisitor的方法visit方法签名竟然不一样,所以解决方法很简单,项目在加HIBERNATE3能力的时候不加库,直接用Spring的AOP的库就可以了。

在使用Spring的AOP编程时,会用到这几个lib:
asm-2.2.2.jar
asm-commons-2.2.2.jar
asm-util-2.2.2.jar

Hibernate使用如果lib:
asm.jar
asm-attrs.jar

其中asm-2.2.2.jar与asm.jar存在类上的冲突!
使用其中之一或两者都使用,可能会出现如下错误:
java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitor
java.lang.NoClassDefFoundError: org/objectweb/asm/commons/EmptyVisitor
java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit。。。。。。

解决办法是:
去掉类路径上的关于Hibernate的3个lib
asm.jar
asm-attrs.jar
cglib-2.1.3.jar

保留Spring中的以下4个lib
asm-2.2.2.jar
asm-commons-2.2.2.jar
asm-util-2.2.2.jar
cglib-nodep-2.1_3.jar

或去掉asm-commons-2.2.2.jar
asm-util-2.2.2.jar
cglib-nodep-2.1_3.jar

(14) 错误提示:net.sf.cglib.core.CodeGenerationException:
java.lang.reflect.InvocationTargetException-->null
Caused by: java.lang.reflect.InvocationTargetException
Caused by: java.lang.SecurityException:
class "com.wuwei.struts.bean.User
EnhancerByCGLIB
1016ffbf"'s signer information does not match signer information of other classes in the same package

在….hbm.xml文件中,将class标签的lazy属性改为false(默认为true)
<class name="com.wuwei.struts.bean.User" table="user" lazy="false">。如果有schema="dbo" catalog="test"配置信息,请将其删除