我使用的是NHibernate 2.2,我想通過XML映射中的兩列進行簡單連接。NHibernate加入多列
比方說,我有兩個表:
現在我想要一個簡單的選擇,並加入了兩個表:
SELECT t1.*, t2.ProductionDate
FROM table1
JOIN table2 t2 ON t1.Name = t2.Name AND t1.Price = t2.Price
我怎樣才能做到這一點NHibernate的與XML的映射?
我使用的是NHibernate 2.2,我想通過XML映射中的兩列進行簡單連接。NHibernate加入多列
比方說,我有兩個表:
現在我想要一個簡單的選擇,並加入了兩個表:
SELECT t1.*, t2.ProductionDate
FROM table1
JOIN table2 t2 ON t1.Name = t2.Name AND t1.Price = t2.Price
我怎樣才能做到這一點NHibernate的與XML的映射?
在XML映射中,可以映射類之間的關係。只有當你的班級有這樣的關係:
class Class1
{
public Class2 { get; set; }
}
你可以映射這個關係。但它通常需要使用主鍵進行關聯。有一種方法可以使用property-ref
來映射其他屬性,但是在那裏它開始變得很奇怪,特別是當有多個列進來時。
我懷疑你在類中有這樣的關係。
因此,鏈接只能在查詢中進行。它與你在SQL中的做法相似。請注意,HQL中的「連接」僅限於實際關係(正如我上面所演示的),而不是任意的屬性比較(不像SQL,沒有區別)。
HQL:
select c1.*, c2.ProductionDate
from Class1 c1, Class2 c2
where c1.Name = c2.Name and c1.Price = c2.Price
這是不可能的標準(除非使用子查詢,但你不能返回ProductionDate)。除了回退到SQL之外,沒有辦法使它成爲外部聯接。
評論:您可能認爲NHibernate在這裏幫助不大。事實確實如此。原因是NHibernate是一個ORM,可以讓你以面向對象的方式實現你的業務邏輯。你在這裏的關係不是典型的面向對象的關係。這不是你在純粹的面向對象設計中通常處理類的方式。
感謝您的回答!我最終在xml部分使用了一個查詢。我這樣做了,所以我可以將我的代碼中的引用更改爲特定的文件。我需要這個以保持與不同的數據庫版本兼容。 – Franki1986