2013-12-18 4 views
8

私たちはSpring 3.2.4とHibernate 4.2.3に基づくWebアプリケーションを持っています。それはappfuse 2.2.1 archetypeを使用して生成されました。使用可能なドキュメントに応じて、SessionFactoryのpackagesToScanプロパティを使用して、エンティティクラスを動的に取得し、sessionFactoryを設定することができます。しかし、hibernate.cfg.xmlにエンティティクラス名を明示的に記述しなければならないという問題に直面し、hibernateによって認識されるようにしなければなりません。 フォーラムに適切な回答が見つかりませんでしたので、ここに投稿してください。どのように動作するのか理解している可能性がありますので、どのポインタも歓迎しているかもしれません。hibernate 4 sessionfactory packagestoscanプロパティの使用

おかげ

applicationContext.xmlを

<?xml version="1.0" encoding="UTF-8"?> 
<beans -- namespace declarations here 
     default-lazy-init="true"> 
    <!-- Activates scanning of @Autowired --> 
    <context:annotation-config/> 
    <!-- Activates scanning of @Repository and @Service --> 
    <context:component-scan base-package="com.xyz"/> 
</beans> 

hibernate.cfg.xmlの

<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 
     <mapping class="com.xyz.model.Address" /> 
     <mapping class="com.xyz.model.Company" /> 
     <mapping class="com.xyz.model.CompanyBilling" /> 
     <!-- BIG LIST OF MY ENTITY CLASSES --> 
    </session-factory> 
</hibernate-configuration> 

ApplicationContextの-dao.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans -- namespace declarations here 
     default-lazy-init="true"> 
    <bean class="org.springframework.orm.hibernate4.HibernateExceptionTranslator"/> 
    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/> 
    <!-- Hibernate SessionFactory --> 
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" destroy-method="destroy"> 
     <property name="dataSource" ref="dataSource"/> 
     <property name="configLocation" value="classpath:hibernate.cfg.xml"/> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
       <prop key="hibernate.query.substitutions">true 'Y', false 'N'</prop> 
       <prop key="hibernate.cache.use_second_level_cache">true</prop> 
       <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop> 
      </props> 
     </property> 
     <property name="packagesToScan"><list><value>com.xyz.model</value></list></property> 
    </bean> 
<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) --> 
    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory"/> 
    </bean> 
    <!-- Activates scanning of @Autowired --> 
    <context:annotation-config/> 
    <!-- Activates scanning of @Repository --> 
    <context:component-scan base-package="com.xyz.dao"/> 
</beans> 

Company.java

package com.xyz.model; 
// imports 
@Entity 
@Table(name = "company") 
@SQLDelete(sql = "UPDATE company SET activeFlag = 0, lastupdated=now() WHERE id = ?") 
@Where(clause = "1=activeflag") 
@Component 
public class Company extends BaseEntity implements java.io.Serializable { 
    // properties and getter setters 
} 
+1

どちらの '@ Entity'アノテーションを使用していますか? –

+0

@ m-deinum import javax.persistence.Entity; – Pragmatic

+0

あなたは 'hibernate.cfg.xml 'なしで試しましたか?スキャンしたエンティティを無効にする可能性があります(空の場合)。なぜあなたのエンティティに '@ Component'があるのだろうと思っていますが、それは実際には意味がありません。 –

答えて

-4

変更:

<property name="packagesToScan"><list><value>com.xyz.model</value></list></property> 

へ:

<property name="packagesToScan" value="com.xyz.model" /> 

これは私の仕事です。

1

第2のプロパティpackagesToScanは、注釈付きエンティティクラスを自動的にスキャンするJavaパッケージを指定します。この方法では、もはやHibernateマッピングファイルを準備する必要はありません。

関連する問題