我主要针对 MSSQL 数据库使用 NHibernate,其中我为各种表使用了 MSSQL 模式。

在我的 NH 映射 (HBM) 文件中,我为映射中的每个表指定了架构,如下所示:

<?xml version="1.0"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   auto-import="true"
                   schema="xyz">                 <!-- schema specified -->
  <class name="Customer">
    <id name="Id">
      <generator class="native" />
    </id>
    <property name="Name" />
  </class>
</hibernate-mapping>

对于我的单元测试,我一直在试验 SQLite,但是我的映射现在失败了,因为 NH 报告找不到数据库“xyz”。

我知道 schema 的解释存在差异,那么 NH 的解释/实现是什么,使用模式时的最佳方法是什么?

顺便说一句:使用诸如“nhibernate 数据库架构”之类​​的关键字在网络上搜索并没有产生任何相关信息。

最佳答案

“标准”解释是表具有由三部分组成的名称: “CATALOG.SCHEMA.TABLE”:这些是标准(ISO-SQL 标准?)“information_schema” View 中使用的名称。 Hibernate(大概也是NHibernate)遵循这个约定,可以在类映射中指定catalog和schema,在配置中指定default_catalog和default_schema。

在我自己的单元测试环境(使用 Hypersonic)中,我在构建 SessionFactory 之前调整了 Hibernate 配置:我自己这样做是为了做一些事情,比如设置 HSQL 兼容的 IdentifierGenerators,但你可能可以通过清除映射类的模式属性。

一般来说,我尽量避免在应用程序中指定模式和目录。在 Oracle 中,我通常创建同义词,以便用户看到他们自己命名空间中的对象;在PostgreSQL中,在数据库配置中设置search_path;在 SQL Server 中,将所有表放入“dbo”。

关于NHibernate "database"模式混淆 [.\hibernate-mapping\@schema],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/887605/

10-12 12:42
查看更多