1

我想做一个本机 SQL 查询,它连接 2 个表。

返回值应该是 District Table 的所有元素,这将是(id, name, district_code, coordinates),以及在 acount(*)中的所有 Objects 的 a District(因此与其他一些表连接)。

所以我有第一区的所有列,(district.*)Count(*). 我可以使用哪种查询,以便在我的 java 代码中使用它?我无法添加实体,或者因为count(*)不适合它!?

我有一个 District 类,如下所示:

@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;
    }
}

我的 District.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>

编辑:

我不能用 HQL 或 JPQL 来做,因为我的 FROM CLAUSE 中需要一个 SUBSELECT。

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 会做得很好。这种查询的结果将只是 a 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 回答