Правильная версия Spring и Hibernate и требуемые зависимости ... Исключение из-за зависимостей - PullRequest
5 голосов
/ 16 марта 2011

Уже три дня я пытаюсь запустить мои программы Spring-Hibernate.Мне было очень трудно найти связанные зависимости из-за разницы версий между hibernate2 и hibernate3.Наконец я смог запустить программу со следующим набором зависимостей

  • cglib-nodep-2.1_3.jar
  • commons-collection.jar
  • commons-dbcp.jar
  • commons-pool.jar
  • commons-logging.jar
  • dom4j-1.4.jar
  • ehcache-1.6.0-beta1.jar
  • hibernate-3.1.3.jar
  • hsqldb.jar
  • jta.jar log4j-1.2.9.jar
  • mysql-connector-java-5.0.8-bin.jar
  • org.springframework.orm-3.1.0.M1.jar
  • org.springframework.transaction-3.1.0.M1.jar
  • spring-2.5.6.jar
  • spring-beans-2.0.4.jar

теперь после двух дней усилий, когда я смог управлять вышеупомянутыми зависимостями, которые я пытался построитьпохожая программа, но она выдает следующую ошибку. Я пытался найти решение в Интернете, но решение, которое я нашел, не является верной версией Spring и Hibernate ... Может ли кто-нибудь сказать мне правильную причину исключения, а также правильную версию Spring и Hibernate?


Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myRecordDAO' defined in class path resource [applicationContext.xml]: Cannot resolve reference to bean 'hibernateTemplate' while setting bean property 'hibernateTemplate'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateTemplate' defined in class path resource [applicationContext.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is java.lang.reflect.MalformedParameterizedTypeException
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:275)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:104)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1245)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1010)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
    at java.security.AccessController.doPrivileged(Native Method)

Я также добавляю свое приложение context.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/subhash"/>
        <property name="username" value="root"/>
        <property name="password" value=""></property>
    </bean>


    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource"><ref local="dataSource"/></property>
        <property name="mappingResources">
            <list>
                <value>MyRecord.hbm.xml</value>
            </list>
         </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
                <prop key="show_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">create</prop>
            </props>
        </property>

    </bean>

    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
        <property name="sessionFactory"><ref local="sessionFactory"/></property>
    </bean>
    <bean id="myRecordDAO" class="com.shoesobjects.MyRecordDAOHibernateWithSpring">
        <property name="hibernateTemplate"><ref local="hibernateTemplate"/></property>
    </bean>
</beans>

Ответы [ 4 ]

3 голосов
/ 16 марта 2011

a)

Примечание
Начиная с Spring 3.0, для Spring требуется Hibernate 3.2 или более поздняя версия .

Источник:

b)

  • org.springframework.orm- 3.1.0.M1 .jar
  • org.springframework.transaction- 3.1.0.M1 .jar
  • spring- 2.5.6 .jar
  • spring-beans- 2.0.4 .jar

Вы действительно думаете, что смешивание текущих предварительных версий (3.1.x) с древними версиями (2.0.4 было выпущено в 2007 году) является хорошей идеей?


Как говорит Мэтт : используйте систему управления зависимостями, такую ​​как Maven, то, с чем вы имеете дело, это jar hell.Вот статья о ссылках на артефакты Spring 3.x от maven:

Получение артефактов Spring 3 с Maven

1 голос
/ 18 марта 2011

Получил, что моя проблема решена ... Как указал Шон, это было из-за смешивания различных версий Spring и Hibernate. Сообщение для других новичков: пожалуйста, используйте последнюю версию spring и hibernate. Начиная с Spring 3.0, для Spring требуется Hibernate 3.2 или более поздняя версия. Никогда не следует смешивать старую и новую версии.

1 голос
/ 16 марта 2011

Я предлагаю использовать инструмент управления зависимостями, например Maven или Apache Ivy , чтобы вам не пришлось самостоятельно обрабатывать зависимости и требуемые версии.1006 *

Документы Hibernate при использовании с Maven
0 голосов
/ 16 марта 2011

Вот простой файл, который работал для меня, я использовал менеджер транзакций, а не шаблон.

<bean id="mySqlDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="com.mysql.jdbc.Driver" />
            <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/stackoverflow" />
            <property name="user" value="root" />
            <property name="password" value="******" />
            <property name="maxPoolSize" value="50" />
    </bean>

    <bean id="sessionFactory"
            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
            <property name="dataSource" ref="mySqlDataSource" />
            <property name="mappingResources">
                    <list>
                            <value>Post.hbm.xml</value>
                            <value>Tag.hbm.xml</value>
                            <value>User.hbm.xml</value>
                    </list>
            </property>

            <property name="hibernateProperties">
                    <value>hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
                    </value>
                    <!--
                            hibernate.connection.provider_class =
                            org.hibernate.connection.C3P0ConnectionProvider
                            hibernate.hbm2ddl.auto=update
                            hibernate.current_session_context_class=thread
                    -->
            </property>
    </bean>

    <bean id="transactionManager"
            class="org.springframework.orm.hibernate3.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory" />
            <!--
                    <property name="dataSource" ref="mySqlDataSource"/>
            -->
    </bean>

Кроме того, я думаю, что пакет загрузки hibernate поставляется с отдельными папками, которые указывают его конкретные зависимости.Что касается взаимосвязи между спящим и весенним, я думаю, вам придется использовать какой-то инструмент управления зависимостями, как предлагали другие.Я не думаю, что Maven это удобный инструмент.Только не отступайте от ожидаемой структуры проекта Maven, и все будет в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...