Wir haben eine Webanwendung basierend auf Spring 3.2.4 und Hibernate 4.2.3. Es wurde mit dem Appfuse 2.2.1 Archetype generiert. Gemäß der verfügbaren Dokumentation können wir die Eigenschaft packagesToScan der SessionFactory verwenden, um Entitätsklassen dynamisch auszuwählen und die sessionFactory einzurichten. Allerdings müssen wir den Namen der Entitätsklasse in hibernate.cfg.xml explizit angeben, damit er von Hibernate erkannt wird. Ich konnte keine passenden Antworten in Foren finden, also hier posten. Es kann sein, dass mein Verständnis davon, wie es funktioniert, falsch ist, daher sind alle Hinweise willkommen.hibernate 4 sessionfactory placestoscan eigenschaftsverwendung
Dank
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>
application-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
}
Welche '@ Entity' Annotation verwenden Sie? –
@ m-deinum import javax.persistence.Entity; – Pragmatic
Haben Sie versucht, ohne die 'hibernate.cfg.xml'. Wenn Sie es zuvor (leer) hatten, könnte dies die gescannten Objekte außer Kraft setzen. Ich frage mich nur, warum es eine '@ Component' auf deiner Entity gibt, die keinen Sinn ergibt. –