我有两个实体角色和翻译。
角色->角色ID,代码
翻译->代码、语言、名称
例如:
角色(1,'Rol\u 001')可以具有以下关系:Translation('Rol\u 001','English','')&Translation('Rol\u 001','French','')。
我想用HQL表达以下SQL查询:
select r.Role_ID, t.Name
from Role r left outer join Translation t
on r.Code = t.Code and t.Language = @lang;
在我的映射文件中,这两个实体之间没有任何关系,但是下面的HQL查询就像内部连接一样工作
IQuery query = session.CreateQuery("select new Lookup(r.Role, t.Name) from Role r, Translation t where r.Code = r.Code and t.Language = :language");
你能帮我做以下事情吗
2-如果我可以保持映射文件的原样,如何在HQL中编写这样的查询?
编辑:
现在我使用以下基于建议的代码来使用CreateSQL:
ISQLQuery query = session.CreateSQLQuery("select m.MedicineTypeID, t.Name, m.IsDeleted from MedicineType m left outer join Translation t on m.Code = t.Code and t.Language = :language");
query.SetString("language", language);
IList rawLookup = query.List();
IList medicineTypesLookup = new List(rawLookup.Count);
foreach (object[] lookup in rawLookup)
{
medicineTypesLookup.Add(new Lookup((int)lookup[0], (string)lookup[1], (bool)lookup[2]));
}
return medicineTypesLookup;
query.AddEntity(typeof(Lookup));
但我有个例外
NHibernate.MappingException: No persister for: DAL.Domain.Lookup
.
查找只是一个POCO,不映射到任何数据库表。它的映射文件
<import class="Lookup" />