Spring 3.1 без файла persistence.xml выдает «Невозможно разрешить корневой URL-адрес модуля сохранения» - PullRequest
10 голосов
/ 08 ноября 2011

Я пытаюсь использовать JPA EntityManagerFactory начальной загрузки без persistence.xml , который является новым в Spring 3.1 (начиная с M2), но кажется, что Spring все еще ищет файл persistence.xml, несмотря натот факт, что указано packagesToScan.

В context.xml entityManagerFactory настроен следующим образом:

<bean id="my-persistence-unit"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="persistenceProviderClass"
        value="org.hibernate.ejb.HibernatePersistence"/>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
    </property>
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
        </props>
    </property>
    <property name="packagesToScan">
        <list>
            <value>my.package.name</value>
        </list>
    </property>
</bean>

Но при запуске приложения PersistenceException с сообщением "Невозможно разрешить"встречается корневой URL-адрес единицы хранения:

...
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'my-persistence-unit' defined in class path resource [META-INF/context.xml]: 
...
Caused by: javax.persistence.PersistenceException: Unable to resolve persistence unit root URL
        at org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager.determineDefaultPersistenceUnitRootUrl(DefaultPersistenceUnitManager.java:429)
        at org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager.preparePersistenceUnitInfos(DefaultPersistenceUnitManager.java:327)
        at org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager.afterPropertiesSet(DefaultPersistenceUnitManager.java:309)
        at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:209)
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1504)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1442)
        ... 34 more 
Caused by: java.io.FileNotFoundException: class path resource [] cannot be resolved to URL because it does not exist
        at org.springframework.core.io.ClassPathResource.getURL(ClassPathResource.java:179)
        at org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager.determineDefaultPersistenceUnitRootUrl(DefaultPersistenceUnitManager.java:426)
        ... 40 more

До того, как я добавил packagesToScan, у меня был минимальный persistence.xml, и я установил persistenceXmlLocation, например:

<property name="persistenceXmlLocation"
    value="classpath:META-INF/persistence.xml"/>

который работал нормально.Так что же я сейчас делаю неправильно?

edit добавлено jpaVendorAdapter, ошибка остается.

edit Удалено persistenceUnitName за удаленный комментарий;переименовывает bean-компоненты в имя единицы сохраняемости (для @PersistenceContext)

update эта ошибка, похоже, зависит от того, какой тип загрузчика контекста приложения используется.Код работает в тесте пружины / джунта через @ContextConfiguration, но не через ClassPathXmlApplicationContext

Ответы [ 2 ]

10 голосов
/ 08 ноября 2011

Это ошибка весной, я сообщил об этом .

Обратите внимание, что это происходит только для упакованного приложения, когда все элементы classpath являются jar-файлами. Вот почему он не терпит неудачу в модульных тестах.

0 голосов
/ 08 ноября 2011

Я не думаю, что этот класс позволяет полностью удалить файл persistence.xml. Из его Javadoc:

"Однако этот FactoryBean более гибок, поскольку вы можете переопределить расположение файла persistence.xml, указать источники данных JDBC для ссылки и т. Д."

Я думаю, что он позволяет вам иметь минимальный файл persistence.xml, а затем позволяет дополнительно настраивать EMF с помощью слушателей и т. Д.

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