Я хочу выполнить собственный SQL-запрос в hibernate 3.5.hibernate native SQL query error
Я использую mysql 5 как dbms, проверял запрос в mysqlworkbench, и я получаю нужные данные.
поэтому я создал объект SQLQuery в своем java-коде, задал строку запроса и необходимый параметр.
после выполнения запроса я получаю изречение исключение:
org.hibernate.exception.SQLGrammarException: could not execute query
....
Caused by: java.sql.SQLException: Column 'name' not found.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:929)
at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1145)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5617)
at org.apache.commons.dbcp.DelegatingResultSet.getString(DelegatingResultSet.java:225)
at org.hibernate.type.StringType.get(StringType.java:41)
at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:184)
at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:210)
мой запрос (который работает хорошо, когда непосредственно выполняющийся на сервере):
select site.name as constructionSiteName, site.id as constructionSiteId, com.name,
sum(pos.sum_checked_brutto) as sumCheckedBrutto,
sum(pos.sum_checked_netto) as sumCheckedNetto
from constructionsite site
inner join costunit cu on site.id = cu.constructionsite
inner join costunit_position pos on pos.costunit_id = cu.id
inner join company com on pos.company_id = com.id
where com.id = 57
group by site.id;
Вот как я создать строку запроса в мой код Java:
String queryString = "select site.name as constructionSiteName, site.id as constructionSiteId, " +
"sum(pos.sum_checked_brutto) as sumCheckedBrutto, sum(pos.sum_checked_netto) as sumCheckedNetto " +
"from constructionsite site " +
"inner join costunit cu on site.id = cu.constructionsite " +
"inner join costunit_position pos on pos.costunit_id = cu.id " +
"inner join company com on pos.company_id = com.id " +
"where com.id = ? " +
"group by site.id ";
затем я установил его в объект SQLQuery и установил t он Param:
SQLQuery query = getSession().createSQLQuery(queryString);
query.setLong(0, companyId);
Последний шаг «выполнить» запрос с:
List result = query.list();
я действительно не знаю, что я делаю неправильно, и был бы очень признателен некоторую помощь.
Тпх заранее
EDIT:
сгенерированный SQL Statement выполняется спячки:
2011-05-19 10:42:50,143 DEBUG SQL:111 - select site.name as constructionSiteName,
site.id as constructionSiteId, sum(pos.sum_checked_brutto) as sumCheckedBrutto,
sum(pos.sum_checked_netto) as sumCheckedNetto
from constructionsite site
inner join costunit cu on site.id = cu.constructionsite
inner join costunit_position pos on pos.costunit_id = cu.id
inner join company com on pos.company_id = com.id where com.id = ?
group by site.id
я также нашел это на выходе сервера:
2011-05-19 10:42:50,159 INFO StringType:203 - could not read column value from result set: name; Column 'name' not found.
ps: пожалуйста, не путайте имена таблиц и столбцов. : D – theFriedC
Вы можете распечатать фактическое значение queryString после назначения –
2011-05-19 10: 42: 50,143 DEBUG SQL: 111 - выберите имя сайта как constructionSiteName, site.id как constructionSiteId, sum (pos.sum_checked_brutto) как sumCheckedBrutto, sum (pos.sum_checked_netto) как sumCheckedNetto из сайта siteite site join join.id = cu.constructionsite внутреннее соединение costunit_position pos on pos.costunit_id = cu.id внутреннее объединение company com on pos.company_id = com.id, где com.id =? group by site.id 2011-05-19 10: 42: 50,159 INFO StringType: 203 - не удалось прочитать значение столбца из набора результатов: name; Имя столбца не найдено. – theFriedC