2013-12-18 14 views
8

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 
} 
+1

Welche '@ Entity' Annotation verwenden Sie? –

+0

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

+0

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. –

Antwort

-4

Wechsel:

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

An:

Das funktioniert für mich.

1

Die zweite Eigenschaft packagesToScan gibt das Java-Paket an, das automatisch nach annotierten Entitätsklassen sucht. Auf diese Weise ist es nicht länger notwendig, die Hibernate-Mapping-Datei vorzubereiten.

Verwandte Themen