我有一個項目,我們只使用命名查詢來訪問數據庫。最近我們創建了一些新的實體,我們計劃按照每個子類的模式映射表,所以我們在文檔之後創建了映射,並且一切似乎都很好,除了我們無法找到如何在命名查詢中定義表別名以便加載每個子類。NHibernate爲每個子類指定查詢
這是我們迄今所做的:
實體:
public class Gear
{
public virtual string Name { get; set; }
public virtual string Slug { get; set; }
}
public class Pedal : Gear
{
public virtual PedalTypeEnum PedalType { get; set; }
}
映射:
public class GearMap : ClassMap<Gear>
{
public GearMap()
{
Table("[Gear]");
Id(m => m.Id).Column("Id");
Map(m => m.Name).Column("[Name]");
Map(m => m.Slug).Column("[Slug]");
}
}
public class PedalMap : SubclassMap<Pedal>
{
public PedalMap()
{
Table("[Pedal]");
KeyColumn("[Gear_Id]");
Map(m => m.PedalType).Column("PedalType").CustomType(typeof(PedalTypeEnum));
}
}
而且我們正試圖執行查詢是這樣的一個:
<sql-query name="myquery" >
<return alias="[Gear]" class="Gear" />
<![CDATA[
SELECT
{[Gear].*},
FROM
[Gear] {[Gear]}
]]>
</sql-query>
,這導致由NHibernate的生成以下SQL:
SELECT
[Gear].[Id] as column1_12_0_,
[Gear].[Name] as column3_12_0_,
[Gear].[Slug] as column4_12_0_,
[Gear]_1_.PedalType as PedalType13_0_,
case
when [Gear]_1_.[Gear_Id] is not null then 1
when [Gear].[Id] is not null then 0 end as clazz_0_
FROM
[Gear] [Gear]
正如你可以看到它正確檢測到子類和嘗試加載只屬於子場PedalType但因爲沒有表與別名[Gear]_1_.
查詢失敗...
我們已經試着與踏板表的連接,但我們無法找到設置別名,它轉化爲[Gear]_1_.
有什麼幫助嗎?
是否有任何理由使用SQL而不是HQL? –