2012-05-29 21 views
0

我有表如下表模式:hibernate中的列別名?

enter image description here
我創建了返回的值上查詢執行的列表的方法。

protected List findAllWithGroupClause(Class clazz) { 

    List objects = null; 
    try { 
     startOperation(); 
     String SQL_QUERY = "SELECT COUNT(serviceName) AS RunningInstances ,serviceName,SUM(numberofthread) as workerThread " 
       + "FROM servicemanagerdetails WHERE servicemanagerstatus=:status GROUP BY serviceName"; 
     Query query = session.createQuery(SQL_QUERY); 
     query.setString("status", "Running"); 
     objects = query.list(); 
     tx.commit(); 
    } catch (HibernateException e) { 
     handleException(e); 
    } finally { 
     HibernateFactory.close(session); 
    } 
    return objects; 
} 

和該聲明ServiceManagerDetails.hbm.xml文件:

<?xml version="1.0" encoding="UTF-8"?> 
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
    <class name="com.arosys.hibernatedatamanager.ServiceManagerDetails" table="servicemanagerdetails"> 
    <id column="servicedetailsid" name="servicedetailsID" type="integer"> 
     <generator class="increment"/> 
    </id> 
    <property column="serviceID" name="servicemanagerID" type="string"/> 
    <property column="servicemode" name="servicemode" type="string"/> 
    <property column="servicetype" name="servicetype" type="string"/> 
    <property column="servicemanagerstatus" name="servicemanagerstatus" type="string"/> 
    <property column="controlqueue" name="controlQueue" type="string"/> 
    <property column="controlexchange" name="contolExchange" type="string"/> 
    <property column="controlroutingkey" name="controlRoutingkey" type="string"/> 
    </class> 
</hibernate-mapping> 

我創建列別名,它是必要寫setter和getter方法以及定義映射請解釋如何可以從列表中檢索值。

感謝

回答

1

您有選擇的聚合函數COUNT,SUM等。在這種情況下Query.list()返回對象的數組列表休眠的SELECT語句。

如果你想獲得第四行的總和,你做

Object obj4[] = objects.get(3); 
long sum4 = ((Number)obj4[2]).longValue(); 

和第三行的服務名,你做

Object obj3[] = objects.get(2); 
String name2 = (String)obj4[2]; 

(爲說明這兩個例子中,你的代碼會看起來更可變)。

你不需要寫getter和setter,你甚至不能這樣做。您不能在選擇字符串外使用列別名。