2013-05-05 10 views
7

Wiosną 3.1 i wyżej, LocalContainerEntityManagerFactoryBean ma być w stanie skonfigurować JPA EntityManagerFactory bez persistence.xml. Konfiguracja jest zawarta w definicji komponentu bean dla LocalContainerEntityManagerFactoryBean.Spring LocalContainerEntityManagerFactoryBean scanForPackages i Hibernate definicje typów pakietów na poziomie pakietu

Kiedy użyć metody packagesToScan powiedzieć fasoli fabryki, gdzie skanowanie do moich klas podmiot nie wydaje się być picking mój Hibernate type definitions które są zdefiniowane na poziomie pakietu.

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; 

wiosna-jpa.xml:

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

Czy istnieje sposób, aby to działało?

Odpowiedz

-1

Zauważyłem, że dodanie adnotacji @MappedSuperclass do pakietu typeedefs powoduje, że Hibernate odnajduje i przetwarza je. To nie wydaje się być bardzo pięknym rozwiązaniem, więc wciąż szukam lepszego sposobu, jeśli taki istnieje.

package-info.java:

@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

Mam wobec tego samego problemu. Ale jak wspominasz, kiedy dodaję @MappedSuperclass, otrzymam następujący błąd Maven --------> ERROR] core \ model \ package-info.java: [2,0] error: typ adnotacji nie dotyczy tego rodzaj deklaracji – Channa

Powiązane problemy