本节大致讲解Nhibernate和Spring的结合及其配置
<? xml version ="1.0" encoding ="utf-8" ?>
< objects xmlns ="http://www.springframework.net"
                 xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation ="http://www.springframework.net http://www.springframework.net/xsd/spring-objects.xsd" >

     < object id ="SessionFactory" type ="Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate12" >
         < property name ="DbProvider" ref ="DbProvider" />
         < property name ="MappingAssemblies" >
             < list >
                 < value >Model </ value >
             </ list >
         </ property >
         < property name ="HibernateProperties" >
             < dictionary >
                 < entry key ="hibernate.connection.provider" value ="NHibernate.Connection.DriverConnectionProvider" />
                 < entry key ="hibernate.dialect" value ="NHibernate.Dialect.MsSql2005Dialect" />
                 < entry key ="hibernate.connection.driver_class" value ="NHibernate.Driver.SqlClientDriver" />
                 < entry key ="show_sql" value ="true" />
             </ dictionary >
         </ property >
     </ object >

     < object id ="HibernateTransactionManager" type ="Spring.Data.NHibernate.HibernateTransactionManager, Spring.Data.NHibernate12" >
         < property name ="DbProvider" ref ="DbProvider" />
         < property name ="sessionFactory" ref ="sessionFactory" />
     </ object >

     < object id ="TransactionInterceptor" type ="Spring.Transaction.Interceptor.TransactionInterceptor, Spring.Data" >
         < property name ="TransactionManager" ref ="HibernateTransactionManager" />
         < property name ="TransactionAttributeSource" >
             < object type ="Spring.Transaction.Interceptor.AttributesTransactionAttributeSource, Spring.Data" />
         </ property >
     </ object >

     < object id ="DbProvider" type ="DAO.SQLProvider, DAO" >
         < property name ="ConnectionString" value ="server=.\sql2k5;uid=sa;pwd=sa123;database=test;" />
     </ object >
     < object id ="SpringDaoHelper" type ="DAO.SpringDaoHelper" >
         < property name ="SessionFactory" ref ="SessionFactory" />
     </ object >

</ objects >
web.config主要配置这三个,其中< httpModules>配置在system.web节点内
< spring >
         < context >
             < resource uri ="config://spring/objects" />
             < resource uri ="assembly://SpringX/SpringX/spring_hibernate_dao.xml" />
         </ context >
         < objects xmlns ="http://www.springframework.net" />
     </ spring >
< httpModules >
             < add name ="Spring" type ="Spring.Context.Support.WebSupportModule, Spring.Web" />
         </ httpModules >
         < httpHandlers >
             < add verb ="*" path ="*.aspx" type ="Spring.Web.Support.PageHandlerFactory, Spring.Web" />
         </ httpHandlers >
< configSections >
         < sectionGroup name ="spring" >
             < section name ="context" type ="Spring.Context.Support.WebContextHandler, Spring.Web" />
             < section name ="objects" type ="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
         </ sectionGroup >
         < section name ="SpringOverrideProperty" type ="System.Configuration.NameValueSectionHandler" />
         < section name ="nhibernate" type ="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
     </ configSections >
好了当你运行出现Nhibernate composite-id class must override Equals()时是因为当使用Nhibernate查询表中的数据时,如果表中存在复合主键,如果没有在相应的实体类中重写Equals(),那么将会出现异常。需要在实体类中重写Equals()方法,如果还出现错误,说是编译不了映射文件,那么再重载GetHashCode()