0

次のテーブルスキーマを持つテーブルがあります:

ここに画像の説明を入力
クエリの実行時に値のリストを返すメソッドを作成しました。

    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>

セッターとゲッターメソッドを記述し、マッピングを定義する必要があるため、列エイリアスを作成しましたか?リストから値を取得する方法を説明してください。

ありがとう

4

1 に答える 1

1

集計関数 COUNT、SUM などを選択するための select ステートメントがあります。この場合、休止状態Query.list()はオブジェクトの配列のリストを返します。

4 行目の SUM を取得する場合は、次のようにします。

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

3行目のserviceNameについては、

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

(説明のための両方の例。コードはより可変に見えます)。

ゲッターとセッターを書く必要はありません。それさえできません。選択文字列の外で列のエイリアスを使用することはできません。

于 2012-05-29T09:59:36.363 に答える