oracle – Hibernate本机SQL错误
我正在尝试使用hibernate 3.3.2.GA执行sql本机查询.
我有以下查询. session.createSQLQuery("SELECT {dept1.*},{dept2.*} FROM Dept d1,Dept d2 WHERE d1.deptId = d2.deptId"). addEntity("dept1",com.test.pojo.Dept.class). addEntity("dept2",com.test.pojo.Dept.class). list(); Dept类的映射文件是 <?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 name="com.test.pojo.Dept"> <id column="deptId" name="deptId" type="long"> <generator class="native"/> </id> <version name="version" access="field" column="version"></version> <property name="deptName" type="string" column="deptName"/> <set name="emps" cascade="all" inverse="true"> <key column="deptId"></key> <one-to-many class="com.test.pojo.Emp"/> </set> </class> </hibernate-mapping> 但为什么我得到以下错误?它将我的查询转换为
Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not execute query at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) at org.hibernate.loader.Loader.doList(Loader.java:2235) at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2129) at org.hibernate.loader.Loader.list(Loader.java:2124) at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:312) at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1723) at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165) at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:175) at com.test.test.Test1.main(Test1.java:96) Caused by: java.sql.SQLException: ORA-00904: "DEPT2"."DEPTNAME": invalid identifier at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134) at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289) at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:590) at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1973) at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteDescribe(TTC7Protocol.java:850) at oracle.jdbc.driver.OracleStatement.doExecuteQuery(OracleStatement.java:2599) at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2963) at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:658) at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:584) at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208) at org.hibernate.loader.Loader.getResultSet(Loader.java:1812) at org.hibernate.loader.Loader.doQuery(Loader.java:697) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259) at org.hibernate.loader.Loader.doList(Loader.java:2232) ... 7 more它应该是 session.createSQLQuery( "SELECT {dept1.*},{dept2.*} FROM Dept dept1,Dept dept2 WHERE dept1.deptId = dept2.deptId") .addEntity("dept1",com.test.pojo.Dept.class) .addEntity("dept2",com.test.pojo.Dept.class) .list(); 如果您被文档(18.1.4. Returning multiple entities)误导,那里有一个错误(HHH-2976),请随意投票. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |