2011-09-12 9 views
0

두 클래스로 가정하십시오 ProductProductTranslation. 이 제품의 속성은 Product.Title이며 ProductTranslation입니다. 두 개의 언어가있는 경우 (예 : 내 시스템에 ende 인 경우 Product.Title 세트는 각 제품에 대해 두 개의 항목을 보유합니다.특정 언어에 따라 일련의 번역을 주문하십시오.

특정 언어로 정렬 된 제품 목록을 반환하는 HQL을 공식화 할 수있는 방법이 있습니까? en? 또는 이러한 종류의 정렬은 메모리 내에서 DB 액세스 이후에만 가능합니다 (예 : Linq 또는 다른 비교기와 함께?

Thx 어떤 아이디어라도! sl3dg3

편집 : 주문 했는데도 여전히 ProductTranslation 전체 세트를 받고 싶습니다.

답변

0
내가 가능한 해결책을 알아 낸

을 사용할 수 있습니다 그냥 HQL 워드 프로세서에서 찾고, 내가 의심 : 그것은 수행 할 수 있습니다 이중 가입 :

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 
0

특정 문화권을 사용하여 주문 하시겠습니까? 아니면 일치하는 번역본에 따라 간단한 주문 만 하시겠습니까? 후자 인 경우에는 가입 한 것처럼 들립니다. LINQ에서 뭔가처럼 될 것입니다 : 나는에 해당하는 HQL이 어떻게 될지 모르는

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 당신이 자 NHibernate에 LINQ를 사용할 수있는 경우 (... 아무런 문제없이 조인 처리 확신, 괜찮 너무 물론 그것을 처리한다)

편집 :. 당신이

from Product as product 
inner join fetch product.Translations translation 
where translation.language = 'en' 
order by translation.title asc 
+0

특정 문화에 따라 주문하는 것을 의미합니다. 내가 영어를 쳤다면, 나는 영어 번역에 따라, 그렇지 않으면 독일어에 따라 책을 주문하고 싶다. 예, linq은 아무 문제가 없지만, HQL에서 어떻게 작동하는지 내 마음을 굳힐 수는 없습니다. – sl3dg3

+0

@ sl3dg3 : 아니, 제 생각에 문화에 대한 나의 관점을 놓친 것 같아요. 다른 문화권에서는 같은 말을 다르게 주문할 것입니다. * HQL을 시도해보십시오. –

+0

@ Jon : 맞습니다. 문화는 물론 중요합니다. 그러나 단순성을 위해 문화 불변이라고 명령해야합니다. 당신의 예에 관해서, 저는 한 가지 중요한 점을 간략히 설명하기를 놓 쳤습니다. 나는 모든 언어를 받고 싶습니다. 이 경우 나는 영어 만받을 것입니다. 또 다른 중요한 점은'ProductTranslation'에는 매핑 된 역 참조가 없다는 것입니다. 나는이 두 가지 요점이 불가능하다고 생각한다. – sl3dg3

관련 문제