2012-09-07 2 views
9

에 나는 레거시 데이터베이스와 일하고 있어요, 나는 다음과 같은 테이블이 있습니다NHibernate에 매핑 한 기본 키

Person     ExternalFile 
------     ------------ 
Id   (int, PK) Key   (string) 
ConnectionId (int)  Type   (int) 
Name   (string) ConnectionId (int) 
Firstname (string) Path   (string) 
         Id   (int, PK) 

개인은 많은 외부 파일이 있습니다.

예는 주어진 :

Person A    ExternalFile1   ExternalFile2 
--------    -------------   ------------- 
Id: 1     Key: 'WN'    Key: 'WN' 
ConnectionId: 29  Type: 4    Type: 4 
Name: 'Foo'    ConnectionId: 29  ConnectionId: 29 
Firstname: 'Bar'  Path: 'C:/file1.txt' Path: 'D:/file2.txt' 
         Id: 1     Id: 2 

나는이지도를 할 수있는 사용자가 ExternalFiles의 가방을 가질 수 있도록?

내 mappingfiles

ExternalFile :

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Not.Relative" assembly="Not"> 
    <class name="ExternalFile" table="tbl_externalfiles" lazy="false"> 
    <id name="Id" column="`Id`"> 
     <generator class="identity" /> 
    </id> 
    <property name="Key" column="`CDKey`" /> 
    <property name="ConnectionId" column="`KeyValue`" /> 
    <property name="Type" column="`DocType`" /> 
    <property name="Path" column="`Path`" /> 
    </class> 
</hibernate-mapping> 

담당자 :

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Not.Relative" assembly="Not"> 
    <class name="Person" table="tbl_person" lazy="false"> 
    <id name="Id" column="`Id`"> 
     <generator class="identity" /> 
    </id> 
    <property name="ConnectionId" column="`pairid`" /> 
    <property name="Name" column="`name`" /> 
    <property name="Firstname" column="`firstname`" /> 
    </class> 
</hibernate-mapping> 

과 같을 것입니다 내 쿼리 :

SELECT * 
FROM tbl_externalfiles 
WHERE KeyValue = @p0 
AND CDKey = @p1 
AND DocType = @p2 

@p0 = 29, @p1 = 'WN', @p2 = 4 

그래서 나는에 3 개 개의 매개 변수를 제공해야 가방 fr 외부 파일에 톰 명,

1 : 사람의 ConnectionID

2 : 'WN'< - 항상 같은 (키)

3 : 4 < - 항상 같은 (유형)

복합 ID로 매핑 할 때이 기능이 여러 개 작동하지만이 경우 사용할 수 없습니다.

가방도 여기에 있습니까? 추가 쿼리를 사용하여 쿼리 기준을 사용하는 ExternalFiles를 가져와야합니다.

편집 :

는 내가 단지 connectionId

<bag name="Files" lazy="false"> 
    <key column="KeyValue" property-ref="ConnectionId"/> 
    <one-to-many class="ExternalFile" /> 
</bag> 

에 대해 다음 작업을 수행 할 수 있습니다 알고 있지만 내가 거기 aswell의 유형과 주요 매개 변수를 얻을하는 방법을 모르겠어요.

감사

답변

13

<bag name="Files" lazy="false" where="DocType = '4' AND CDKey = 'WN'"> 
     <key column="KeyValue" property-ref="ConnectionId" /> 
     <one-to-many class="ExternalFile" /> 
    </bag> 
+0

작품이 완성보십시오! 감사. –

+0

굉장! 나는 이것에 대해서 생각하지 않았다. –