Ответ 1
Мы все время делаем это - и вот как мы это делаем:
-
Определите простой bean -подобный объект для представления каждой строки вывода в вашем отчете:
public class CityStateRevenueReport { private String mId; private String mState; private String mCity; private Double mRevenue; public String getId() { return mId; } public void setId(String i) { mId = i; } public String getState() { return mState; } public void setState(String s) { mState = s; } public String getCity() { return mCity; } public void setCity(String c) { mCity = c; } public Double getReveneue() { return mRevenue; } public void setRevneue(Double d) { mRevenue = d; } }
-
Определите файл сопоставления спящего режима, CityStateRevneueReport.hbm.xml:
<?xml version="1.0" ?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class entity-name="CityStateRevenueReport"> <id name="Id" type="java.lang.String" column="report_id"> <generator class="sequence" /> </id> <property name="city" type="string" column="city" /> <property name="state" type="string" column="state" /> <property name="revenue" type="double" column="revenue" /> </class> <sql-query name="runReport"> <![CDATA[ SELECT {r.*} FROM (select some_id_value as report_id, state_abbreviation as state, city_name as city, dollar_amount as revenue from -- tables, joins, other SQL insanity ) r ]]> <return alias="r" class="CityStateRevenueReport" /> </sql-query> </hibernate-mapping>
-
Затем запустите запрос и заполните экземпляры:
public List<CityStateRevenueReport> runReport() { List<CityStateRevenueReport> reports = new ArrayList<CityStateRevenueReport>(); List<HashMap> maps = session.getNamedQuery("runReport").list() for ( HashMap map : results ) { CityStateRevenueReport report = new CityStateRevenueReport(); report.setState(map.get("state")); report.setCity(map.get("city")); report.setRevenue(Double.parseDouble(map.get("revenue")); reports.add(report); } return reports; }