这是设置。
NHibernate,Fluent NHibenrate和Nhibernate Linq
隐身的实体是
故障有警报,警报有一组描述,系统中每个langague一个。
许多故障都可以引用警报。
当用户搜索其中一个参数时,他们可以按描述搜索(和排序)故障。这意味着传递使用的特定语言。
要完成的SQL很容易入手:
SELECT f.*, a.*, d.Description
FROM Fault f
JOIN Alarm a ON f.Alarm_id = a.Id
JOIN AlarmDescription d ON a.Id = d.Alarm_id AND d.Language = @lang
以上查询会给我所有错误,警报和所选语言的描述。
但是,让Nhibernate生成这样的查询很困难。
因此,归结为其中一个过滤器是主要对象的子对象的子集合。我试图使用Linq2Nhibenrate,HQL并尝试使Native SQL也能正常工作。原生SQL似乎最有可能成功,但我无法弄清楚如何正确映射别名。我想要任何解决方案,包括更改域模型。这个让我很难过。
答案 0 :(得分:0)
这是一个可能的HQL:
select f, d.Description
from Fault f
join fetch f.Alarm a
join a.Descriptions d
where d.Language = :lang
这将检索元组列表(object[2]
),其中第一个元素是Fault(带有初始化的Alarm),第二个元素是所选语言的描述文本。