Hibernate ASM Spring java.lang.NoSuchMethodError sessionFactory

时间:2012-03-22 16:21:45

标签: java spring hibernate glassfish

我想我已经知道问题是什么了。我一直收到这个错误

org.springframework.beans.factory.BeanCreationException: 
Could not autowire method: public void proTurism.DAO.AbstractDAO.setSession(org.hibernate.SessionFactory); nested exception is org.springframework.beans.factory.BeanCreationException: 
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.ClassWriter.<init>(I)V

问题在于两个不兼容的ASM版本,一个使用spring和一个hibernate。我有hibernate ASM(netbeans 7.1中包含的未知版本)和spring ASM(3.0.6)。但我还没有找到任何解决方案如何让一个asm或任何东西让它在带有netbeans的glassfish中工作。

我的applicationcontext.xml

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="packagesToScan" value="proTurism"/>
    <property name="configurationClass">
        <value>org.hibernate.cfg.AnnotationConfiguration</value>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
        </props>
    </property>
</bean>

1 个答案:

答案 0 :(得分:3)

这是一个严重的依赖问题。如果您的两个库(hibernate和spring)依赖于相同版本的ASM,或者根据所使用的功能依赖于非冲突版本的ASM,则只能解决此问题。如果不是这种情况,升级/降级spring / hibernate直到它工作。

如果使用Maven,它会自动显示哪个工件需要哪些版本的依赖项,并且更容易跟踪和使用。即使不使用maven,你仍然可以检查hibernate和spring的pom定义,看看它们使用的asm版本。