9

私は従来のデータベースを使用しており、次のテーブルがあります。

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のバッグを持つようにこれをマップできますか?

私のマッピングファイル

外部ファイル:

<?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 つのパラメーターを指定する必要があります。

1: 個人の ConnectionID

2: 'WN' <-- 常に同じ (キー)

3: 4 <-- 常に同じ (タイプ)

多対 1 では、複合 ID にマップすると機能しますが、この場合は使用できません。

ここでもバッグは可能ですか?追加のクエリを使用して、条件を使用してクエリを実行する ExternalFiles を取得する必要があります。

編集:

connectionId に対してのみ次のことができることを知っています

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

しかし、そこに Type パラメーターと Key パラメーターを取得する方法もわかりません。

ありがとう

4

1 に答える 1

13

これを試して

   <bag name="Files" lazy="false" where="DocType = '4' AND CDKey = 'WN'">
      <key column="KeyValue" property-ref="ConnectionId" />
      <one-to-many class="ExternalFile" />
    </bag>
于 2012-09-07T10:04:05.597 に答える