2013-02-09 2 views
0

Я хочу сделать собственный SQL-запрос, который объединяет 2 таблицы.hibernate native sql query

Возвращаемое значение должно быть все элементы таблицы округов, которые будут (id, name, district_code, maps), а также счетчик (*) всех объектов, находящихся в округе (поэтому соединение с некоторыми другая таблица).

У меня есть все столбцы района (округ. ) одно поле, которое является 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> 

EDIT:

Я не могу сделать это с HQL Одер JPQL, потому что мне нужен SUBSELECT в моей FROM CLAUSE.

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

Прежде всего, для этого вам не нужен собственный запрос. JPQL будет очень хорошо. И результатом такого запроса будет просто List<Object[]>, где каждый массив объектов будет содержать элемент для каждого возвращаемого столбца. Просто пройти по этому списку и делать все, что вы хотите с элементами:

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

Спасибо за ваш ответ, но я нужен родной SQL-запрос, потому что я не могу сделать внутренний выбор по моему ЕКУ. Пожалуйста, посмотрите сами: SELECT d.id, name, district_code, count (*) FROM (SELECT cd.координирует AS координаты FROM cars AS c LEFT JOIN cardetail AS cd ON (c.car_id = cd.car_id)) AS c CROSS JOIN district AS d ГДЕ ST_CONTAINS (d.координаты, c.координаты) GROUP BY id – krackmoe

+1

Это ничего не меняет. SQL-запрос по-прежнему будет возвращать список , где первым элементом каждой строки будет идентификатор, второй - имя и т. Д. –