2012-09-19 35 views
0

Talbes:HQL多表連接和SUM(),第()

Grandpa 
    GP_ID (PK) 
    NAME 

Dad 
    DAD_ID (PK) 
    PG_ID (FK) 

Children 
    C_ID (PK) 
    DAD_ID (FK) 
    MONEY_AMOUNT 
    MONEY_UNIT 

類(此處省略註釋):

class Grandpa 
{ 
    Long id; 
    String name; 

    Double moneyAmount; // sum of Children's money amount 

    String moneyUnit; // first of Children's money unit. 
} 

class Dad 
{ 
    Long id; 
    Grandpa grandpa; 
} 

class Children 
{ 
    Long id; 
    Dad dad; 

    Double moneyAmount; 
    String moneyUni; 
} 

我想寫一個HQL得到爺爺的對象與總和(grandpa.dad.children.money_amount)和第一(grandpa.dad.children.money_unit)。下面是我的,但它不工作:

select gp, sum(chdn.moneyAmount) as gp.moneyAmount, first(chdn.moneyUnit) as gp.moneyUnit 
from Grandpa gp, Dad dad, Children chdn 
where gp.id =: chdn.dad.grandpa.id 

回答

1
select gp.id, gp.name, sum(chdn.moneyAmount) as moneyAmount, min(chdn.moneyUnit) as gp.moneyUnit 
from Children chdn, chdn.dad dad, dad.grandpa gp 
groupBy gp.Id 

,並使用aliastobean變壓器伸入爺爺DTO

或者你實現moneyAmount和單位作爲訪問包含兒童集合屬性爸爸,總結在內存中的金額那麼這將是

select gp from Grandpa gp join fetch gp.children dad join fetch dad.children 

但巨大的笛卡爾產品

提防3210
+0

感謝您的回答,我正在嘗試。有關您的HQL的2個問題: 1.父親沒有領域「兒童」。所以沒有「爸爸。孩子」。 2.如果爺爺有很多領域,我必須在HQL中列出所有領域嗎? – Xiezi

+0

當我嘗試它時,第1行有一個例外,即「。」。在「as gp.moneyAmount」中。它有什麼不對嗎? – Xiezi

+0

1.我會編輯2.是3.點是排字錯誤 – Firo