2

プロジェクトの構造は次のとおりです。

ここに画像の説明を入力

今、次のように 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 ファイルをスキャンする方法はありますか?

どんな情報も私にとって非常に役に立ちます。

4

1 に答える 1

3

リソース名にプロトコル識別子 (file://や などassembly://) を使用していないため、Spring はデフォルトのファイル プロトコルを使用します。ファイルが保存されている場所ではなく、Web アプリが実行されている場所 (devserver パス) から hbm ファイルを解決しようとします。

Web サイト内のファイルを参照するには、a を使用し~て Web サイトのルートを識別します (例: <value>file://~/EMSApplication.Domain/EMSApplication.hbm.xml</value>. ただし、ファイルを埋め込みリソースに設定しているため、ファイルがコピーされていることを確認してください (なぜですか?)。

次の改善点を検討してください。ライブがより簡単になります。

  • フォルダー内のコードを移動daodomainNHibernate別のアセンブリ (Web アプリケーションから参照されるクラス ライブラリ プロジェクト) に移動しますYour.AssemblyName
  • セッション ファクトリは、スキャンするマッピング アセンブリの指定もサポートしているため、各ファイルを指定する必要はありません。 spring.net を使用したセッション ファクトリの設定に関するドキュメントを参照してください。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>

そして、春のドキュメントの NHibernate の例を確認してください。これは、ここで提起している質問に非常に当てはまります。

于 2012-03-20T06:26:20.473 に答える