У меня есть проблема, которая использовала Hibernate 3.6.0 в течение очень долгого времени (или версий здесь). Этот проект находится в разработке с 2009 года и медленно, но верно обновляет версии Hibernate. Некоторое время он использует 3.6.x.
Я попытался обновить систему до 3.6.3, чтобы посмотреть, решит ли она проблему - не сделал. Мои тесты все еще выполняются.
Я только недавно создал реализацию для DefaultPreUpdateEventListener. Он прекрасно работает, когда я тестирую его в IntelliJ. Это работает, когда я запускаю тесты в Maven. Однако, когда я запускаю свое приложение в Tomcat, я получаю эту глупую ошибку classpath:
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 до этого момента. Никто. Почему вдруг у меня возникают проблемы с адом? Я имею в виду, это работает в модульных / интеграционных тестах!
Я действительно ненавижу такие проблемы. Буду признателен, если кто-нибудь сможет помочь. Я потратил 2 часа, пытаясь выяснить, что случилось, но я не вижу проблем. Мои зависимости maven выглядят хорошо - загружается только 1 версия Hibernate.
В такие моменты я бы хотел использовать Rails. Я сомневаюсь, что они когда-либо мирились с этим дерьмом.
Вот моя весенняя конфигурация Hibernate:
<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>