2013-05-05 5 views
7

Spring 3.1以降では、LocalContainerEntityManagerFactoryBeanはpersistence.xmlなしでJPA EntityManagerFactoryを設定できるようになっています。この設定は、代わりにLocalContainerEntityManagerFactoryBeanのBean定義に含まれています。Spring LocalContainerEntityManagerFactoryBean scanForPackagesとHibernateパッケージレベルの型定義

packageToScanメソッドを使用して、エンティティクラスをスキャンする場所をファクトリBeanに伝えると、パッケージレベルで定義されているHibernate type definitionsが取得されていないようです。

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; 

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

はこの作品を作るための方法はありますか?

答えて

-1

@MappedSuperclassアノテーションをパッケージレベルのtypedefsに追加すると、Hibernateはそれを見つけて処理します。それは非常にきれいな解決策のようには見えないので、もし私がまだ存在すればもっと良い方法を探しています。

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

私は同じ問題に直面しています。しかし、あなたが@MappedSuperclassを追加すると言いますが、私はMavenエラーを受けるでしょう--------> ERROR] core \ model \ package-info.java:[2,0]エラー:注釈の種類はこれには当てはまりません一種の宣言 – Channa

関連する問題