2009-05-20 2 views
3

나는 주로 MSSQL 데이터베이스에 대해 NHibernate를 사용하고 있는데, 여기서 MSSQL 스키마를 다양한 테이블에 사용했다.NHibernate "database"스키마 혼동 [. hibernate-mapping @schema]

내 단위 테스트에 대한
<?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 매핑 (HBM) 파일에서

, 나는 매핑 각 테이블에 대한 스키마를 지정한 NH가 데이터베이스 "xyz"를 찾을 수 없다고보고함에 따라 매핑이 실패합니다.

해석의 차이가 schema 인 점을 알고 있습니다. 따라서 NH의 해석/구현은 무엇이며 스키마를 사용할 때 가장 좋은 방법은 무엇입니까?

BTW : "nhibernate database schema"와 같은 키워드를 사용하여 웹을 검색하면 관련성이 없습니다.

public string GetQualifiedName(NHibernate.Dialect.Dialect dialect) 
{ 
    string quotedName = this.GetQuotedName(dialect); 
    return ((this.schema == null) ? 
     quotedName : 
     (this.GetQuotedSchemaName(dialect) + '.' + quotedName)); 
} 

그래서 기본적으로 모든 시나리오에 대한 매핑 별도의 세트를 가지고하는 것보다 다른 스키마 이름을 무시하는 SQLite는 할 수있는 방법은 없습니다 :

+0

현재 NH 2.0.1 GA를 사용 중입니다. 버전 2.1.0 Alpha3을 살펴보면 HBM XSD에 이제 카탈로그 속성이 포함 된 것처럼 보입니다. 더 조사 할 것입니다. – VirtualStaticVoid

답변

6

"표준"해석은 테이블에 "CATALOG.SCHEMA.TABLE"이라는 세 부분으로 된 이름이 있습니다. 표준 (ISO-SQL 표준?) "information_schema"보기에서 사용되는 이름입니다. Hibernate (아마도 NHibernate 일 것이다)는이 규칙을 따른다. 클래스 매핑에서 카탈로그와 스키마를 지정하고, 설정에서 default_catalog와 default_schema를 지정할 수있다.

내 자신의 유닛 테스트 환경 (Hypersonic 사용)에서는 SessionFactory를 빌드하기 전에 Hibernate 구성을 마사지했다. 나는 HSQL 호환 IdentifierGenerators를 설정하는 것과 같은 일을하기 위해이 작업을 수행했으나, 다음과 같은 스키마 속성을 지울 수있다. 맵 된 클래스

일반적으로 응용 프로그램에서 스키마와 카탈로그를 지정하는 것을 피하려고합니다. 오라클에서는 일반적으로 사용자가 자신의 네임 스페이스에있는 객체를 볼 수 있도록 동의어를 만듭니다. PostgreSQL에서 데이터베이스 구성에 search_path를 설정하십시오. SQL Server에서 모든 테이블을 'dbo'에 넣습니다.

1

NHibernate.Mapping.Table 클래스는 다음과 같이 정의 된 GetQualifiedName(NHibernate.Dialect.Dialect dialect) 방법을 가지고 있습니다 (또는 컴파일하기 전에 사전 처리).

1

속성 default_schema을 사용하여 구성 파일에 스키마 (필요한 경우)를 지정할 수 있습니다. 여러 구성 파일을 사용하거나 사용중인 파일을 변경할 수 있습니다. 하나는 프로덕션 용이고 다른 하나는 테스트 용입니다.

스키마 설정을 무시하고 다른 자격 증명을 사용할 수도 있습니다.