Я пытаюсь использовать 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