Spring 3.1 ohne persistence.xml gibt "Nicht lösen Persistenz-unit-root-URL"
Ich versuche,JPA EntityManagerFactory bootstrapping ohne persistence.xml, was ist neu in Spring 3.1 ist (da M2), aber es scheint, dass der Frühling noch auf der Suche nach einem persistence.xml
- Datei trotz der Tatsache, dass packagesToScan
angegeben ist.
In context.xml die entityManagerFactory wird konfiguriert wie folgt:
<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>
Aber beim starten der Anwendung, eine PersistenceException
mit der Meldung "Unable to resolve Persistenz-unit-root-URL" Auftritt:
...
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
Bevor ich Hinzugefügt packagesToScan
hatte ich eine minimale persistence.xml
, und legen Sie die persistenceXmlLocation
etwa so:
<property name="persistenceXmlLocation"
value="classpath:META-INF/persistence.xml"/>
die feinen gearbeitet. Also was mache ich jetzt falsch?
Bearbeiten Hinzugefügt jpaVendorAdapter
, Fehler bleibt.
Bearbeiten entfernt persistenceUnitName pro gelöschten Kommentar; umbenannt Bohnen auf der persistence unit name (für @PersistenceContext
)
update dieser Fehler scheint davon abhängen, welche Art von Anwendung, die Kontext-loader verwendet wird. Der code funktioniert in einem spring/junit test über @ContextConfiguration
, aber nicht über ClassPathXmlApplicationContext
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es ein bug im Frühjahr, ich es berichtet.
Beachten Sie, dass es passiert, nur für eine verpackte Anwendung, wenn alle classpath-Elemente sind die Gläser. Das ist, warum es nicht scheitern, in unit-tests.
Ich glaube nicht, dass diese Klasse ermöglicht es Ihnen komplett entfernen persistence.xml Datei. Aus seiner javadoc:
"Aber das FactoryBean ist flexibler, die kann man überschreiben, den Speicherort der persistence.xml Datei-geben Sie die JDBC-Datenquellen zu verlinken, etc."
Ich denke, was es tut, ist können Sie haben einen minimalen persistence.xml Datei und dann lassen Sie Sie weiter konfigurieren Sie die EMF-proframatically über Hörer usw.