You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 31 Next »

Help is available by sending an email to csf-support@mit.edu
Have any suggestion on how improve this wiki?  Please give us your feedback at csf-support@mit.edu

Hibernate Mappings and CSF version 2

The manner in which hibernate mappings are configured has changed from the manner in which hibernate mappings were configured in sais-common and in the CSF Version 1 series.  In sais-common and in CSF version 1, the sessionFactory's mappingResources property was used to configure hibernate mappings.  The use of the mappingResources property has been deprecated and will no longer be used except to support legacy applications.

With the release of the CSF version 2 series, the sessionFactory's mappingLocations property will be used to configure hibernate mappings.  The mappingLocations property allow for more flexibility when configuring hibernate mappings for several different sources.

The principal advantage of using the mappingLocations property is that you can specify a resource path to the mapping files as opposed to the absolute path to the mapping file.  This is all well and good but what does this actually mean.  Rather than specifying the individual hibernate mappings as shown below:

        <value>edu/mit/csf/example/academic/hibernate/AcademicTerm.hbm.xml</value>
        <value>edu/mit/csf/example/academic/hibernate/AcademicTermDate.hbm.xml</value>
        <value>edu/mit/csf/example/academic/hibernate/AcademicYear.hbm.xml</value>
        <value>edu/mit/csf/example/academic/hibernate/Department.hbm.xml</value>
        <value>edu/mit/csf/example/academic/hibernate/EnrollmentStatus.hbm.xml</value>
        <value>edu/mit/csf/example/academic/hibernate/Course.hbm.xml</value>
        <value>edu/mit/csf/example/academic/hibernate/Citizenship.hbm.xml</value>

        <value>edu/mit/csf/example/student/hibernate/Student.hbm.xml</value>
        <value>edu/mit/csf/example/student/hibernate/StudentOtherMitId.hbm.xml</value>
        <value>edu/mit/csf/example/student/hibernate/StudentMitId.hbm.xml</value>
        <value>edu/mit/csf/example/student/hibernate/ArchivedStudent.hbm.xml</value>
        <value>edu/mit/csf/example/student/hibernate/ArchivedStudentOtherMitId.hbm.xml</value>
        <value>edu/mit/csf/example/student/hibernate/ArchivedStudentMitId.hbm.xml</value>
        
        <value>edu/mit/csf/example/student/hibernate/Country.hbm.xml</value>
        <value>edu/mit/csf/example/student/hibernate/State.hbm.xml</value>
        <value>edu/mit/csf/example/student/hibernate/StudentAddress.hbm.xml</value>
        <value>edu/mit/csf/example/student/hibernate/StudentEmail.hbm.xml</value>
        <value>edu/mit/csf/example/student/hibernate/StudentPhone.hbm.xml</value>

Using the mappingLocations property, you can now specify wildcards in the resource path to match multiple files so that you don't have to configure a hibernate mapping file location every time you add a new mapping file.  This reduces the 16 lines in the above to the following 2 lines shown below:

        <value>classpath*:edu/mit/csf/example/academic/hibernate/*.hbm.xml</value>
        <value>classpath*:edu/mit/csf/example/student/hibernate/*.hbm.xml</value>

Session Factory configuration of hibernate mappings for CSF version 2

Locate your project's sessionFactory bean and add the mappingLocations property as shown below:

    <bean id="sessionFactory" parent="abstractSessionFactory" >
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.jdbc.use_scrollable_resultset">true</prop>
                <prop key="hibernate.jdbc.batch_size">20</prop>
                <prop key="hibernate.cache.use_second_level_cache">true</prop>
                <prop key="hibernate.generate_statistics">true</prop>
                <prop key="hibernate.cache.use_structured_entries">true</prop>
                <prop key="hibernate.cache.region.factory_class">net.sf.ehcache.hibernate.EhCacheRegionFactory</prop>
                <prop key="edu.mit.common.domain.student.hibernate.cache.use_query_cache">true</prop>
            </props>
        </property>
        <property name="mappingLocations">
            <list>
                <value>classpath*:edu/mit/csf/example/academic/hibernate/*.hbm.xml</value>
                <value>classpath*:edu/mit/csf/example/student/hibernate/*.hbm.xml</value>
            </list>
        </property> 
    </bean>
  1. Each project should only have 1 sessionFactory bean defined.
    • For WAR file projects:  The sessionFactory bean should be defined in the project's /src/main/resouces/applicationContext-<projectName>-config.xml file.
    • For JAR file projects:  The sessionFactory bean should be defined in the project's src/test/resources/applicationContext-csf-<projectName>-config-test.xml file.
  2. Hibernate mappings contained in the CSF-COMMON-LEGACY jar file are automatically added to your project via the CSF abstractSessionFactory bean.
  3. Hibernate mappings for the csf-email and csf-ruleengine jars must be added to the mappingLocations.  The resource paths are:
    • For csf-email:
      <value>classpath*:edu/mit/es/csf/email/hibernate/*.hbm.xml</value>
       
    • For csf-ruleengin:
              <value>classpath*:edu/mit/es/csf/ruleengine/hibernate/*.hbm.xml</value>				
      
  • No labels