Я пытаюсь использовать Загрузка JPA EntityManagerFactory без persistence.xml , которая появилась в Spring 3.1 (начиная с M2), но похоже, что Spring все еще ищет файл persistence.xml
, несмотря на то, что Указан packagesToScan
.
В context.xml entityManagerFactory настроен следующим образом:
org.hibernate.dialect.PostgreSQLDialect
my.package.name
Но при запуске приложения возникает 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
, например:
, который работал нормально.Итак, что я сейчас делаю неправильно?
edit добавил jpaVendorAdapter
, ошибка остается.
edit удалено persistenceUnitName для удаленного комментария; bean-компоненты переименованы в имя единицы сохранения состояния (для @PersistenceContext
)
update эта ошибка, похоже, зависит от того, какой тип загрузчика контекста приложения используется. Код работает в тесте spring / junit через @ContextConfiguration
, но не через ClassPathXmlApplicationContext