2011-11-08 12 views
9

"JPA EntityManagerFactory bootstrapping without persistence.xml, Spring 3.1'de (M2'den beri) kullanılmaya çalışıyorum, fakat yine de baharın persistence.xml dosyasını aradığı anlaşılıyor packagesToScan belirtilmesine rağmen. context.xml olarakSpring 3.1 "Kalıcı birim kök URL'sini çözülemiyor"

, entityManagerFactory thusly yapılandırılır:

<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> 

Fakat uygulama başlangıçta

iletiyle bir PersistenceException "kalıcılık birim kök URL'yi çözülemiyor" oluşur:

... 
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 

önce packagesToScan ekledim, en az persistence.xml vardı ve persistenceXmlLocation'u şöyle ayarlayın:

<property name="persistenceXmlLocation" 
    value="classpath:META-INF/persistence.xml"/> 
012 Iyi çalışan

. Peki şimdi yanlış ne yapıyorum?

düzenleme eklendi jpaVendorAdapter, hata devam ediyor.

edit persistenceUnitName silinmiş bir açıklama başına kaldırıldı; (@PersistenceContext için) kalıcılık birimi adının

güncelleme bu hata olarak değiştirildi fasulye uygulama bağlamı yükleyicinin tür kullanıldığı bağlı görünmektedir. Kod, @ContextConfiguration aracılığıyla bir ilkbahar/tekrar testinde çalışır, ancak ClassPathXmlApplicationContext

cevap

9

aracılığıyla proframatically EMF yapılandırmak izin için izin olduğunu düşünüyorum.

Tüm sınıf yolu öğeleri kavanoz olduğunda, yalnızca paketlenmiş bir uygulama için olduğunu unutmayın. Bu yüzden ünite testlerinde başarısız olmaz.

+0

Bunu kaldırmak hiç fark yaratmadı; aynı hata. – beerbajay

+0

@beerbajay: Güncellendi. – axtavt

+0

Harika, sanırım minimum sürekliliğimi koruyacağım.Şimdilik xml ve hata raporuna nasıl tepki verdiklerini gör. – beerbajay

0

aracılığıyla bu sınıfa, persistence.xml dosyasını tamamen kaldırmanıza izin verdiğinizi düşünmüyorum. Kendi javadoc:

"Ancak, bu FactoryBean, persistence.xml dosyasının konumunu geçersiz kılabileceğinizden daha fazla esnektir, bağlantı için JDBC DataSource'ı belirtin, vb."

Ben ne yapar minimal persistence.xml dosyası var ve o zaman daha da O, ben reported it Bahar bir hata var vs. dinleyici

+1

Gerçekten mi? Bağlantılı olduğum dokümana "Etkili bir şekilde, bu, XML taramasına izin veren JPA'nın, varlık taraması için bir temel paket belirleme pahasına sadece pahasına" – beerbajay

+2

"Ayrıca yay tabanlı tarama durumunda, persistence.xml gerekli değildir" diyor. http://static.springsource.org/spring/docs/3.1.0.RC1/javadoc-api/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBean.html#setPackagesToScan%28java.lang.String...%29 – beerbajay

+0

Adamın kodunu yanlış kopyaladın. Onun: <özellik adı = "jpaPropertyMap"> değil <özellik adı = "jpaProperties">. Ve 'ı da eklemeniz gerekiyor. –