2010-12-28 17 views
5

मैं हाइबरनेट 3.3.2.GA का उपयोग कर SQL मूल क्वेरी निष्पादित करने का प्रयास कर रहा हूं।हाइबरनेट मूल 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(); 

मानचित्रण फ़ाइल

<?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> 

है लेकिन मैं त्रुटि निम्न हो सकते हैं? यह

SELECT dept1.**deptId as deptId1_0_, **dept1.**version as version1_0_, **dept1.**deptName as deptName1_0_, **dept2.**deptId as deptId1_1_, **dept2.**version as version1_1_, **dept2.**deptName as deptName1_1_ **FROM Dept d1, Dept d2 WHERE d1.deptId = d2.deptId.

Hibernate: SELECT dept1.deptId as deptId1_0_, dept1.version as version1_0_, dept1.deptName as deptName1_0_, dept2.deptId as deptId1_1_, dept2.version as version1_1_, dept2.deptName as deptName1_1_ FROM Dept d1, Dept d2 WHERE d1.deptId = d2.deptId 20:43:41,109 WARN JDBCExceptionReporter:100 - SQL Error: 904, SQLState: 42000 20:43:41,109 ERROR JDBCExceptionReporter:101 - ORA-00904: "DEPT2"."DEPTNAME": invalid identifier

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 

उत्तर

1

करने के लिए मेरी जिज्ञासा को परिवर्तित किया जाता है ORA-XXX कोड के साथ गूगल की कोशिश करो। से http://www.dba-oracle.com/t_ora_00904_string_invalid_identifier.htm

Question: I am running a SQL statement and I get a SQL*Plus error ORA-00904 invalid identifier.

Answer: When ORA-00904 occurs, you must enter a valid column name as it is either missing or the one entered is invalid. The "invalid identifier" most common happens when you are referencing an invalid alias in a select statement. The Oracle docs note this on the ORA-00904 error:

+0

नहीं, समस्या हाइबरनेट कनवर्टिंग क्वेरी को अमान्य में है। मैं हाइबरनेट-संदर्भ दस्तावेज को रेफर कर रहा हूं। – Neel

3

यह

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), इसके लिए वोट करने के लिए स्वतंत्र लग रहा है है।

+0

मुझे लगता है कि d1.deptId और d2.deptID को डिप्टी * ;-) में भी संशोधित किया जाना चाहिए –

संबंधित मुद्दे