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