Sto utilizzando Hibernate 3.2.5 per la mia applicazione.Lancio SQL nativo Eccezione nome colonna non valido
Ho una tabella Dept
e una tabella Employees
.
Dept.java
private int deptId;
private String deptName;
private Map empMap = new HashMap();
//Getters and Setters
Employees.java
private int empId;
private String empName;
private int deptId;
private int age;
private String sex;
private Dept dept;
file di mapping HBM
<class name="com.jdbc.Dept" table="dept">
<id name="deptId" type="integer" column="DEPT_ID">
<generator class="assigned"></generator>
</id>
<property name="deptName">
<column name="DEPT_NAME"></column>
</property>
<map name="empMap" inverse="false" cascade="all" lazy="true">
<key column="DEPT_ID"></key>
<map-key formula="EMP_ID" type="integer"></map-key>
<one-to-many class="com.jdbc.Employees"/>
</map>
Di seguito si riporta il codice per SQL Native:
SQLQuery query = session.createSQLQuery("Select d.DEPT_ID, e.EMP_NAME from Dept d,Emp e where d.DEPT_ID = e.DEPT_ID")
.addEntity(Dept.class);
List<Dept> departments = query.list();
for(Dept depart :departments)
System.out.println(depart.getDeptName());
io sono sempre l'eccezione:
org.hibernate.exception.GenericJDBCException: could not execute query
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.doList(Loader.java:2223)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
at org.hibernate.loader.Loader.list(Loader.java:2099)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:289)
at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1695)
at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:152)
at com.jdbc.HibernateStartup.main(HibernateStartup.java:75)
Caused by: java.sql.SQLException: Invalid column name
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:207)
at oracle.jdbc.driver.OracleStatement.getColumnIndex(OracleStatement.java:3295)
at oracle.jdbc.driver.OracleResultSetImpl.findColumn(OracleResultSetImpl.java:1913)
at oracle.jdbc.driver.OracleResultSet.getString(OracleResultSet.java:1514)
at org.hibernate.type.StringType.get(StringType.java:18)
at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:163)
at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:154)
at org.hibernate.type.AbstractType.hydrate(AbstractType.java:81)
at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2096)
at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1380)
at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1308)
at org.hibernate.loader.Loader.getRow(Loader.java:1206)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:580)
at org.hibernate.loader.Loader.doQuery(Loader.java:701)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.doList(Loader.java:2220)
... 7 more
Quando eseguo la query direttamente nel db, poi io sono sempre l'uscita corretta, ma in ibernazione, sta dando un Invalid COlumn name
. Ho confermato che i nomi delle colonne sono solo corretti.
Gentilmente fammi sapere come risolvere questo problema.
E dove è il vostro mappatura per classe 'Employees'? – Andremoniy
Manca la tua query 'DEPT_NAME' –
Perché questo tipo di comportamento? Cosa succede se si tratta di un grande tavolo con un sacco di colonne in cui ho bisogno di alcune delle colonne per il mio scopo? In quel caso devo anche aggiungere tutti i nomi delle colonne? Si prega di spiegare. – user182944