2012-09-17 34 views
2

我已經編寫了查詢來計算指定企業下可用位置的數量。 SQL查詢是這樣的當在SQL中用作別名時,在JPA實體中存儲不存在列

SELECT 
e.enterprise_id, 
e.ent_name, 
(
    SELECT count(l.location_id) 
    FROM rfx_ent_locations l 
    WHERE l.loc_type_id <> 1001 
     AND e.enterprise_id = l.enterprise_id 
) AS locCount 
FROM rfx_enterprises e 
WHERE e.partner_type = 102; 

如果在實體中作爲列引入,則會出現錯誤,表示沒有找到列。要檢索包含用作別名的locCount的實體,請使用JPA我應該如何繼續?

+0

你的問題不清楚。你想通過EntityManager.createNativeQuery來運行這個查詢嗎?如果是這樣,不知道「檢索爲實體」是什麼意思。 –

+0

@SteveEbersole:如果我寫爲本地查詢,我需要分配給實體類。本機查詢的結果被分配給映射列的實體。此外,如果我有像locCount這樣的額外列,我該如何映射? – Prathap

回答

0

不要做你數查詢與that.do它分開這樣

Query query = session.createQuery("SELECT count(l.location_id) 
    FROM rfx_ent_locations l 
    WHERE l.loc_type_id <> 1001 
     AND e.enterprise_id = l.enterprise_id");// do as you please with the query result 

    /** 
    * instead of doing a second query to get the count. Just do a quick count using Iterator 
    */ 

    for (Iterator iterator = query.iterate(); iterator.hasNext();) { 
     iterator.next(); 
     count++; 
    } 

    Integer queryCount = count; 

本集以queryCount在class.so您@Transient varible setter方法,你可以有你的計數


嘗試這樣

Integer count = (Integer) session.CreateQuery("SELECT count(l.location_id) 
FROM rfx_ent_locations l 
WHERE l.loc_type_id <> 1001 
    AND e.enterprise_id = l.enterprise_id").UniqueResult(); 

乾杯!

+0

這兩種方法都不起作用。結果不能設置爲「@transient」變量。第二個查詢將返回可用記錄的總數。 – Prathap