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

我可以映射这个以便用户拥有一包外部文件吗?

我的映射文件

外部文件:

<?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 <-- 总是相同的(类型)

当我映射到复合 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 回答