2011-02-02 7 views
4

Spring 3 + Hibernate JPAスタックを使用するWebアプリケーションがあります。Spring 3 + Hibernate JPAを使用する場合、JPAアノテーション付きクラスを発見してください。

@EntityアノテートされたクラスをHibernateに自動的に発見させる方法があるかどうかを知りたいので、persistence.xmlファイルにそれらをリストする必要はありません。 私の@Entity注釈付きクラスは、WebアプリケーションのWEB-INF/libにある別のjarファイルに「生きて」います。

これは私のSpring構成ファイルからの抜粋です:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="persistenceUnitName" value="mypersistence"/> 
    <property name="dataSource" ref="dataSource"/> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
      <property name="showSql" value="true"/> 
      <property name="generateDdl" value="true"/> 
      <property name="databasePlatform" value="org.hibernate.dialect.DerbyDialect"/> 
     </bean> 
    </property> 
</bean> 

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="org.apache.derby.jdbc.ClientDriver"/> 
    <property name="url" value="jdbc:derby://localhost:1527/library;create=true"/> 
    <property name="username" value="app"/> 
    <property name="password" value="app"/> 
</bean> 

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory"/> 
</bean> 

<bean id="persistenceAnnotation" class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/> 

答えて

7

を必要としています。何も指定する必要はなく、自動的に動作します。

+0

すごく、私はそれを試してみましょう。 –

+0

このヒントに感謝します。私は既にクラスパスを再帰的にスキャンして、jarファイル内のクラスを見つけようとしていました。 :-) –

2

エンティティをスキャンするために、別のjarファイルがpersistence.xml<jar-file>要素を使用して指定されています。もしエンティティが/WEB-INF/lib/entities.jarに位置しているのであれば、あなたはあなたのエンティティが住んで瓶内のpersistence.xmlファイルを置くことができます

<jar-file>lib/entities.jar</jar-file> 
+1

オクラホマなどのapplicationContext.xmlをであなたの@Entity注釈付きクラスを指定することができますそれ。それでも、JPAアノテーション付きクラスをスキャンするためにHibernate/Springを持つ方法があるので、persistence.xmlは任意のjarを参照する必要はありません(jarは名前などを変更する可能性があります)。 –

+0

@Luciano: 'LocalContainerEntityManagerFactoryBean'は、' MutablePersistenceUnitInfo.addJarFileUrl() 'を呼び出すことでこの要素をプログラムで追加できるカスタムPersistenceUnitPostProcessorを設定できるようです。 – axtavt

3

あなたも、私は知らなかったおかげで、この

<property name="packagesToScan"> 
    <list> 
     <value>com.vattikutiirf.nucleus.domain</value> 
     <value>com.vattikutiirf.nucleus.domain.generated.secondtime</value> 
    </list> 
    </property> 

+0

'LocalContainerEntityManagerFactoryBean.setPackagesToScan'は、[Spring 3.1以降](http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/orm/jpa)でのみ利用可能であることに注意してください。 /LocalContainerEntityManagerFactoryBean.html#setPackagesToScan(java.lang.String ...)) – NickG

関連する問題