假设有两个班级Product
和ProductTranslation
。该产品具有属性Product.Title
,这是一组ProductTranslation
。
如果我有两种语言,例如在我的系统中en
和de
,Product.Title
的集合将为每个产品保留两个条目。
有没有办法制定一个HQL,它返回一个产品列表,按照特定的语言排序,例如: en
?或者这种排序只有在内存中的DB访问之后才可能,例如,与Linq或任何比较器?
任何想法的Thx! sl3dg3
编辑:尽管有订单,我仍然希望收到整套ProductTranslation
。
答案 0 :(得分:0)
目前尚不清楚您是指使用特定文化订购,还是根据匹配的翻译进行简单订购。如果是后者,那听起来就像是一个联接。在LINQ中,它将类似于:
string language = "en";
var query = from product in db.Product
join translation in db.ProductTranslation
.Where(t => t.Language == language)
on product.Id equals translation.productId
orderby translation.Title
select new { Product = product, translation.Title };
我不知道等效的HQL是什么,但我确信HQL处理连接没有问题...(如果你可以使用LINQ到NHibernate,那当然也应该处理它。)
编辑:只看HQL文档,我怀疑你可以使用
from Product as product
inner join fetch product.Translations translation
where translation.language = 'en'
order by translation.title asc
答案 1 :(得分:0)
我找到了一个可能的解决方案:可以使用双连接来完成:
FROM Product AS product
INNER JOIN FETCH product.Translations ordered_trans
INNER JOIN FETCH product.Translations trans
WHERE ordered_trans.language = 'en'
ORDER BY ordered_trans.Title ASC