项目结构是:
现在我正在尝试创建一个bean NHibernateSessionFactory
:
<object id="NHibernateSessionFactory" type="Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate32">
<property name="DbProvider" ref="DbProvider"/>
<property name="MappingResources">
<list>
<value>EMSApplication.Domain/EMSApplication.hbm.xml</value>
</list>
</property>
<property name="HibernateProperties">
<dictionary>
<entry key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/>
<entry key="dialect" value="NHibernate.Dialect.MsSql2008Dialect"/>
<entry key="connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/>
<entry key="proxyfactory.factory_class" value="NHibernate.Bytecode.DefaultProxyFactoryFactory, NHibernate"/>
<entry key="show_sql" value="true"/>
<entry key="hbm2ddl.auto" value="update"/>
<entry key="cache.use_query_cache" value="true"/>
</dictionary>
</property>
<property name="ExposeTransactionAwareSessionFactory" value="true" />
</object>
但我收到错误消息:
Error creating context 'spring.root': file [C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\10.0\EMSApplication.Domain\EMSApplication.hbm.xml] cannot be resolved to local file path - resource does not use 'file:' protocol.
现在项目在D盘上,我想知道为什么这是指向C盘?
另外,如何在映射资源中添加指定的hbm文件?此文件设置为“嵌入式资源”。
有没有办法在这里指定一个目录来扫描多个hbm文件?
任何信息都对我很有帮助。
答案 0 :(得分:3)
您没有在资源名称中使用协议标识符(例如file://
或assembly://
),因此Spring使用默认文件协议。它尝试从运行Web应用程序的位置(devserver路径)解析hbm文件, not 存储文件的位置,这似乎是你期望的。
要引用您网站中的文件,请使用~
标识您网站的根目录,例如: <value>file://~/EMSApplication.Domain/EMSApplication.hbm.xml</value>
。但是要确保文件被复制,这可能不是这种情况,因为你已经将它设置为嵌入式资源(为什么?)。
考虑以下改进,它们会让您的生活更轻松:
dao
,domain
和NHibernate
中的代码移动到名为Your.AssemblyName
的单独程序集(从Web应用程序引用的类库项目)。 Your.AssemblyName
:<object id="MySessionFactory" type="Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate">
<property name="DbProvider" ref="DbProvider"/>
<property name="MappingAssemblies">
<list>
<value>Your.AssemblyName</value>
</list>
</property>
<property name="HibernateProperties">
<!-- snip -->
</object>
并查看the NHibernate example in the spring docs - 它非常适用于您在此处提出的问题。