2011-01-23 82 views
0

我得到了以下映射:一到一個,並指定列

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="false"> 
    <class name="Gate.Users.User, Gate.Models" table="users"> 
    <id name="Id" column="id"> 
     <generator class="sequence"> 
     <param name="sequence">users_id_seq</param> 
     </generator> 
    </id> 
    <one-to-one class="Gate.Extensions.Extension, Gate.Models" foreign-key="extension_id" name="Extension" /> 
    </class> 
</hibernate-mapping> 

表(僞):

table users 
(
    id primary key 
    extension_id int 
) 

table extensions 
(
    id primary key 
    address varchar(40) 
) 

我的問題是NHibernate的用途users.id代替users.extension_id當獲取擴展名時。我的映射在任何方面都不正確?

更新

我改爲many-to-one結合,而現在它的工作原理。猜猜我必須誤解one-to-one是如何使用的?

回答

1

這些表格按照多對一的方式排列。 (多個用戶可能擁有相同的extension_id)

對於一對一的用戶,您只需要用戶表中的id列(它是您發佈的兩個表中的),並且它應該具有與在擴展表中的id列,通過這種方式真正強制您只能爲每個用戶使用一個擴展名,反之亦然。

如果您確實想要維護單獨的鍵,您可以使用name屬性來指定User對象的extensionId屬性,並使用property-ref屬性來指定Extension對象的ID。 Here's a blog post on it.

+0

有一個真正的1-1關係。好吧,差不多。 `Extension'可以被不同類型使用,並且有一列標識它與哪個類型相關聯。一個對象只能有一個擴展名,一個擴展名也可以與一個對象相關聯。因此將ID放置在擴展表中。 – jgauffin 2011-01-23 21:30:06

相關問題