использование MergingPersistenceUnitManager для загрузки сущности - PullRequest
2 голосов
/ 01 марта 2012

У меня есть настройка проекта, где у меня есть модуль, который присутствует в папке WEB-INF / lib родительского файла war.Этот модуль содержит файл persistence.xml и сущность, которую мне нужно загрузить, когда контейнер JPA загружается во время запуска.Каким-то образом мне нужно объединить персистентные единицы войны и библиотеку.файл persistence.xml моей войны присутствует в WEB-INF / classes / META-INF, поэтому он будет принимать WEB-INF / classes в качестве корня персистентности и не будет понимать сущность из моего lib jar.Это я узнал трудным путем.

Я наткнулся на нескольких людей, предлагающих решения этой проблемы

http://ancientprogramming.blogspot.com/2007/05/multiple-persistencexml-files-and.html И я также обнаружил, что существует проект Spring-Data-jpa, в котором есть MergingPersistenceUnitManager, который объединит классопределения сущностей.

Вот моя конфигурация

<bean id="pum" class="org.springframework.data.jpa.support.MergingPersistenceUnitManager">
  <property name="persistenceXmlLocations">
    <list>
     <value>classpath*:META-INF/persistence.xml</value>
    </list> 
  </property>
  <property name="defaultDataSource" ref="dataSource"></property>
</bean>


<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="persistenceUnitName" value="LineManagement" />
    <property name="persistenceUnitManager" ref="pum"></property>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="generateDdl" value="false" />
            <property name="showSql" value="false" />
            <property name="databasePlatform" ref="cpsHibernateDialectClassName" />
        </bean>
    </property>

, которая не работает.Это дает мне ошибку java.lang.NoSuchMethodError:org.springframework.data.jpa.support.MergingPersistenceUnitManager.getPersistenceUnitInfo(Ljava/lang/String;)Lorg/springframework/orm/jpa/persistenceunit/MutablePersistenceUnitInfo;

Я понятия не имею, как это дает мне эту ошибку.Насколько я понимаю, MergingPersistenceUnitManager расширяет DefaultPersistenceManager.Единственное, что я подозреваю, это то, что может быть конфликт.

Вот мои зависимости.spring-orm-3.0.2-RELEASE.jar и spring-data-jpa-1.0.3-RELEASE.jar.

Я могу вернуться к древнему программному решению, но разве оно не должно работать изкоробка

1 Ответ

1 голос
/ 02 марта 2012

У вас несовместимые версии spring-orm и spring-data-jpa. В общем, произвольные версии не гарантированно хорошо играют вместе.

MutablePersistenceUnitInfo getPersistenceUnitInfo - метод отсутствует в MergingPersistenceUnitManager (или фактически в его суперклассе DefaultPersistenceUnitManager) в версии или версии 3.0.2.

Из того же класса в версии 3.0.5 вы можете найти этот метод: DefaultPersistenceUnitManager.java Также maven pom для spring-data-jpa-1.0.3 перечисляет зависимость от spring- орм 3.0.5. Итак, Ваша проблема решена с помощью sprin-orm версии 3.0.5.

...