这是我尝试工作的较大查询的较小版本。当我运行查询时,出现以下错误。我尝试删除尽可能多的查询,以尝试找到有罪列,但没有取得任何成功。 我使用Spring 3.2.1,Hibernate的3.6,和Oracle 11gHibernate的无效列名错误createSQLquery
Caused by: java.sql.SQLException: Invalid column name
at oracle.jdbc.driver.OracleStatement.getColumnIndex(OracleStatement.java:3711)
at oracle.jdbc.driver.OracleResultSetImpl.findColumn(OracleResultSetImpl.java:2763)
at oracle.jdbc.driver.OracleResultSet.getBigDecimal(OracleResultSet.java:368)
at org.hibernate.type.descriptor.sql.DecimalTypeDescriptor$2.doExtract(DecimalTypeDescriptor.java:62)
at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:64)
查询:
String query = "SELECT d.ID as {d.id}, d.DETAIL_ORDER as {d.detailOrder}, g.ID as {g.id}, g.NAME as {g.name} " +
"FROM EVAL_MASTER_EVAL_DETAIL d " +
"JOIN EVAL_QUESTION_GROUP g ON d.GROUP_ID = g.ID " +
"WHERE d.ACTIVE = 'Y' " +
"AND d.MASTER_EVAL_ID = :evalId" +
" ORDER BY d.DETAIL_ORDER ASC";
details = session.createSQLQuery(query).addEntity("d", EvalMasterEvalDetail.class)
.addEntity("g", EvalQuestionGroup.class).setParameter("evalId", evalId).list();
得到的Hibernate查询:
Hibernate: SELECT d.ID as ID29_0_, d.DETAIL_ORDER as DETAIL5_29_0_, g.ID as ID34_1_, g.NAME as NAME34_1_ FROM EVAL_MASTER_EVAL_DETAIL d JOIN EVAL_QUESTION_GROUP g ON d.GROUP_ID = g.ID WHERE d.ACTIVE = 'Y' AND d.MASTER_EVAL_ID = ? ORDER BY d.DETAIL_ORDER ASC
映射(验证名称)
EVAL_MASTER_EVAL_DETAIL_SEQ
EVAL_QUESTION_GROUP_SEQ
编辑: 尝试了以下,仍然无效列错误。 ACTIVE & d.active是字符串。
String query = "SELECT ACTIVE as {d.active} " +
"FROM EVAL_MASTER_EVAL_DETAIL";
details = session.createSQLQuery(query).addEntity("d", EvalMasterEvalDetail.class).list();
String query = "SELECT d.ID " +
"FROM EVAL_MASTER_EVAL_DETAIL d ";
details = session.createSQLQuery(query).addEntity("d", EvalMasterEvalDetail.class).list();
String query = "SELECT ID " +
"FROM EVAL_MASTER_EVAL_DETAIL";
details = session.createSQLQuery(query).addEntity("d", EvalMasterEvalDetail.class).list();
这工作,但我只得到标量值:
String query = "SELECT ID " +
"FROM EVAL_MASTER_EVAL_DETAIL";
details = session.createSQLQuery(query).list();
+0
您是否尝试过运行查询以返回单个列? –
+0
您在映射中没有'MASTER_EVAL_ID',并且您在'AND d.MASTER_EVAL_ID =:evalId'中使用它,可能是那个,但是不能确定。 –
+0
尝试将生成的SQL直接执行到Oracle。 –