私たちは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
}
どちらの '@ Entity'アノテーションを使用していますか? –
@ m-deinum import javax.persistence.Entity; – Pragmatic
あなたは 'hibernate.cfg.xml 'なしで試しましたか?スキャンしたエンティティを無効にする可能性があります(空の場合)。なぜあなたのエンティティに '@ Component'があるのだろうと思っていますが、それは実際には意味がありません。 –