Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Hibernate 3.6.3时获取ClassNotFoundException,并在Tomcat中添加了DefaultPreUpdateEventListener_Java_Hibernate_Spring_Exception_Classloader - Fatal编程技术网

Java 使用Hibernate 3.6.3时获取ClassNotFoundException,并在Tomcat中添加了DefaultPreUpdateEventListener

Java 使用Hibernate 3.6.3时获取ClassNotFoundException,并在Tomcat中添加了DefaultPreUpdateEventListener,java,hibernate,spring,exception,classloader,Java,Hibernate,Spring,Exception,Classloader,我有一个问题,它已经使用Hibernate 3.6.0很长时间了(或者在这里的版本)。该项目自2009年开始开发,并且缓慢但肯定地升级了Hibernate版本。它已经使用3.6.x一段时间了 我试着升级到3.6.3,看看它是否解决了这个问题-它没有。我的测试仍在运行 我最近刚刚为DefaultPreUpdateEventListener创建了一个实现。当我在IntelliJ中进行单元测试时,它工作得非常好。当我在Maven中运行测试时,它就工作了。然而,当我在Tomcat中运行我的应用程序时,我

我有一个问题,它已经使用Hibernate 3.6.0很长时间了(或者在这里的版本)。该项目自2009年开始开发,并且缓慢但肯定地升级了Hibernate版本。它已经使用3.6.x一段时间了

我试着升级到3.6.3,看看它是否解决了这个问题-它没有。我的测试仍在运行

我最近刚刚为DefaultPreUpdateEventListener创建了一个实现。当我在IntelliJ中进行单元测试时,它工作得非常好。当我在Maven中运行测试时,它就工作了。然而,当我在Tomcat中运行我的应用程序时,我得到了这个愚蠢的类路径错误:

Caused by: org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [trainingdividend.dao.UpdatedOnEventListener] for bean with name 'trainingdividend.dao.UpdatedOnEventListener#1342f5b' defined in file [C:\Users\egervari\IdeaProjects\trainingdividend-experiment\target\classes\applicationContext.xml]: problem with class file or dependent class; nested exception is java.lang.NoClassDefFoundError: org/hibernate/event/def/DefaultPreUpdateEventListener
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1253)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:433)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:270)
    ... 118 more
Caused by: java.lang.NoClassDefFoundError: org/hibernate/event/def/DefaultPreUpdateEventListener
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1026)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1483)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1361)
    at org.springframework.util.ClassUtils.forName(ClassUtils.java:257)
    at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:408)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1271)
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1242)
    ... 120 more
Caused by: java.lang.ClassNotFoundException: org.hibernate.event.def.DefaultPreUpdateEventListener
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1516)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1361)
    ... 136 more
这真的没有道理。到目前为止,我在运行Hibernate时没有遇到任何问题。没有一个为什么我现在突然有麻烦了?我的意思是,这在单元/集成测试中有效

我真的很讨厌这种问题。如果有人能帮忙,我将不胜感激。我花了两个小时试图找出到底是怎么回事,但我看没问题。我的maven依赖项看起来不错——它只加载了1个版本的Hibernate

在这种情况下,我希望我使用的是Rails。我怀疑他们是否能忍受这些废话

下面是我对Hibernate的spring配置:

<bean id="sessionFactory"
      class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="eventListeners">
        <map>
            <entry key="pre-update">
                <bean class="trainingdividend.dao.UpdatedOnEventListener" />
            </entry>
        </map>
    </property>
    <property name="dataSource" ref="dataSource"/>
    <property name="mappingResources">
        <list>
            <value>hibernate/coursetemplate.hbm.xml</value>
            <value>hibernate/address.hbm.xml</value>
            <value>hibernate/user.hbm.xml</value>
            <value>hibernate/trainee.hbm.xml</value>
            <value>hibernate/company.hbm.xml</value>
            <value>hibernate/instructor.hbm.xml</value>
            <value>hibernate/module.hbm.xml</value>
            <value>hibernate/sysadmin.hbm.xml</value>
        </list>
    </property>
    <property name="namingStrategy">
        <bean class="org.hibernate.cfg.ImprovedNamingStrategy"/>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="javax.persistence.validation.mode">none</prop>

            <prop key="hibernate.dialect">${hibernate.dialect}</prop>
            <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}
            </prop>
            <prop key="hibernate.generate_statistics">false</prop>

            <prop key="hibernate.show_sql">false</prop>
            <prop key="hibernate.format_sql">true</prop>

            <prop key="hibernate.cache.use_second_level_cache">false</prop>
            <prop key="hibernate.cache.provider_class">
                org.hibernate.cache.EhCacheProvider
            </prop>
        </props>
    </property>
</bean>

hibernate/coursetemplate.hbm.xml
hibernate/address.hbm.xml
hibernate/user.hbm.xml
hibernate/trainee.hbm.xml
hibernate/company.hbm.xml
hibernate/讲师.hbm.xml
hibernate/module.hbm.xml
hibernate/sysadmin.hbm.xml
没有一个
${hibernate.dial}
${hibernate.hbm2ddl.auto}
假的
假的
真的
假的
org.hibernate.cache.EhCacheProvider

检查JAR是否包含在类路径中。尝试将jar放入tomcat库中

如果您使用自定义侦听器,您是否尝试在配置中显式添加事件侦听器

<event type="load">
            <listener class="com.eg.MyLoadListener"/>
            <listener class="org.hibernate.event.def.DefaultLoadEventListener"/>
</event>


或者你可以实现org.hibernate.event.PreUpdateEventListener

如果你下载hibernate 3.6.3的源代码,你会发现这个类不存在。 因此,我怀疑,如果您使用hibernate 3.6.3中的类路径点重新编译TrainingRedividion.dao.UpdatedOnEventListener,您会发现它不起作用(老实说,我也检查了hibernate 3.3.2,但它也不存在)


您需要实现自己的PreUpdateEventListener接口案例——它确实存在。

这是我首先看到的。我已经检查了我的maven依赖项。事实上,正确的罐子就在那里。我是说,我一直在运行Hibernate。它已经在那里很久了。它还在那里。它没有消失。我认为这是其中的一个错误,与它实际所说的内容无关。是否添加了新的自定义侦听器?我将在Spring中添加事件侦听器。我没有使用JPA-只是在常规hibernate中将org.hibernate.event.def.DefaultPreUpdateEventListener的另一个条目添加到侦听器类中,因此,即使在“maven clean”之后,也要实现org.hibernate.event.PreUpdateEventListener,而不是扩展DefaultPreUpdateEventListener,Maven在我运行所有测试时发现了这个类,尽管这个类对我来说并不存在。这就是让我绊倒的原因。我使用完全相同的pom.xml启动tomcat。。。但它没有起作用。当然,如果我在IDE中遇到这个错误,当我在Maven中运行测试时,我会在3秒钟内解决它。但它奏效了。这让我相信这是某种错误,而不是它所说的。事实上,我仍然不知道为什么Maven会运行这些测试。我不知道。它根本不应该运行它们——它应该失败。