返回了hibernate本机sql查询

时间:2013-02-09 13:16:08

标签: java hibernate

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

返回值应该是区表的所有元素,即(id,name,district_code,坐标),以及区内所有对象的计数(*)(因此与其他一些对象的连接)表)。

所以我有一个区(区。)的所有列都是Count()的一个字段。 我可以使用哪种查询,以便我可以在我的java代码中使用它?我不能添加一个实体,或因为计数(*)不适合它!?

我有一个区级课程,看起来像这样:

@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

1 个答案:

答案 0 :(得分:1)

首先,您不需要本机查询。 JPQL会做得很好。并且这种查询的结果将只是List<Object[]>,其中每个对象数组将包含每个返回列的元素。只需遍历此列表,并使用元素执行任何操作:

for (Object[] row : list) {
    Integer id = (Integer) row[0];
    String name = (String) row[1];
    ...
    Long count = (Long) row[4];
    ...
}