2013-05-05 18 views
7

İlkbahar 3.1 ve üstü LocalContainerEntityManagerFactoryBean, bir persistence.xml olmadan JPA EntityManagerFactory'yi yapılandırabiliyordu. Yapılandırma, bunun yerine LocalContainerEntityManagerFactoryBean için fasulye tanımında bulunur.Spring LocalContainerEntityManagerFactoryBean scanForPackages ve Hazırda Bekleme paketi düzeyinde tür tanımları

Varlık sınıflarım için taramanın yapılacağı fabrikadaki fasulyeyi anlatmak için packagesToScan yöntemini kullandığımda, paket düzeyinde tanımlanmış olan Hibernate type definitions'u seçmiş gibi görünmüyor.

package-info.java:

@org.hibernate.annotations.TypeDefs({ 
    @org.hibernate.annotations.TypeDef(name = "TypeA", typeClass = com.foo.type.A.class), 
    @org.hibernate.annotations.TypeDef(name = "TypeB", typeClass = com.foo.type.B.class) }) package com.foo.type; 

yay jpa.xml: bu işi yapmak için bir yol

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" lazy-init="true"> 
    <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="jpaPropertyMap"> 
     <map>        
      <entry key="hibernate.dialect" value="com.foo.FooDialect" /> 
      <entry key="hibernate.default_schema" value="dba"/>    
      <entry key="hibernate.cache.use_query_cache" value="false"/> 
      <entry key="hibernate.cache.use_second_level_cache" value="true"/> 
      <entry key="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory"/> 
      <entry key="net.sf.ehcache.configurationResourceName" value="META-INF/ehcache.xml" /> 
      <entry key="javax.persistence.validation.factory" value-ref="validator"/> 
     </map> 
    </property> 
    <property name="packagesToScan"> 
     <list> 
      <value>com.foo.domain</value> 
      <value>com.foo.type</value> 
     </list> 
    </property>    
</bean> 

var mı?

cevap

-1

Paket düzeyine yazılan bir @MappedSuperclass ek açıklaması eklenerek Hazırda Beklet'in bunları bulmasına ve işlemesine neden olduğunu buldum. Çok güzel bir çözüm gibi görünmüyor, bu yüzden hala varsa daha iyi bir yol arıyorum.

package-info.java: Ben de aynı sorunla karşı karşıya gelmiş

@MappedSuperclass // <---HACK TO CAUSE HIBERNATE TO NOTICE THESE TYPE DEFS 
@TypeDefs({ 
    @TypeDef(name = "TypeA", typeClass = com.foo.type.A.class), 
    @TypeDef(name = "TypeB", typeClass = com.foo.type.B.class) 
}) 
package com.foo.type; 

import javax.persistence.MappedSuperclass; 
+1

. Ama eklediğim gibi @MappedSuperclass Maven hatasını takip edeceğim --------> ERROR] core \ model \ package-info.java: [2,0] hata: ek açıklama türü buna uygulanamaz beyanname – Channa

İlgili konular