1

2 つのテーブルを結合するネイティブ SQL クエリを実行したいと考えています。

戻り値は、地区テーブルのすべての要素である必要があります。これは(id, name, district_code, coordinates)、 であり、count(*)にあるすべてのオブジェクトのDistrictです (したがって、他のテーブルとの結合)。

(district.*)だから私は地区1フィールドのすべての列を持っていますCount(*). Java コードで快適に使用できるように、どの種類のクエリを使用できますか? エンティティを追加できない、またはcount(*)が収まらないため!?

次のような地区クラスがあります。

@XmlRootElement
public class District extends AbstractEntity{

    private int id;
    private String name;
    private int district_code;
    @Transient
    private int carsQuantity;

    public District(){}

    @Override
    public int getId() {
        return id;
    }

    @Override
    public void setId(int id) {
        this.id = id;       
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getDistrict_code() {
        return district_code;
    }

    public void setDistrict_code(int district_code) {
        this.district_code = district_code;
    }

    public int getCarsQuantity() {
        return carsQuantity;
    }

    public void setCarsQuantity(int carsQuantity) {
        this.carsQuantity = carsQuantity;
    }
}

私の地区.hbm.xml:

<hibernate-mapping package="at.opendata.entitys">      
    <class name="District" table="districts">       
        <id name="id" column="id">
            <generator class="increment"/>
        </id>
        <property name="name"/>
        <property name="district_code"/>                
    </class>    
</hibernate-mapping>

編集:

FROM句にSUBSELECTが必要なので、HQLまたはJPQLではできません。

SELECT d.id, count(*) FROM (SELECT cd.coordinates AS coordinates FROM cars AS c LEFT JOIN cardetail AS cd ON (c.car_id = cd.car_id)) AS c CROSS JOIN districts AS d WHERE ST_CONTAINS(d.coordinates, c.coordinates) GROUP BY id
4

1 に答える 1

1

まず第一に、そのためのネイティブ クエリは必要ありません。JPQLは問題なく動作します。このようなクエリの結果は単純に になり、List<Object[]>各オブジェクト配列には、返された各列の要素が含まれます。このリストを繰り返し処理し、要素に対して必要なことをすべて行います。

for (Object[] row : list) {
    Integer id = (Integer) row[0];
    String name = (String) row[1];
    ...
    Long count = (Long) row[4];
    ...
}
于 2013-02-09T13:28:02.320 に答える