gpt4 book ai didi

NHibernate 命名查询,每个子类都有表

转载 作者:行者123 更新时间:2023-12-04 18:19:26 26 4
gpt4 key购买 nike

我有一个项目,我们只使用命名查询来访问数据库。最近我们创建了新实体,我们计划按照子类模式映射表,所以我们按照文档创建了映射,一切看起来都很好,除了我们找不到如何在命名查询中定义表别名以便加载每个子类。

这是我们迄今为止所做的:

实体:

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-query name="myquery" >
<return alias="Gear" class="Gear" />
SELECT {Gear.*}
FROM Gear {Gear}
LEFT JOIN Pedal Gear_1_ on Gear.Id = Gear_1_.Gear_Id
</sql-query>

但当然你可以只使用 HQL 而不是 SQL:
<query name="myhqlquery">
from Gear
</query>

但是...我必须说这是 NHibernate 的一种非常低效的用法。您正在与框架进行非常激烈的斗争,而不是利用它的灵 active 。

关于NHibernate 命名查询,每个子类都有表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10995613/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com