Hi,
Have a look at this code:
Code:
/* (non-Javadoc)
* @see eriksson.andreas.dao.CityDao#findByName(java.lang.String)
*/
public City[] findByName(String cityNameToFind) {
Session session = this.obtainSession();
try {
Criteria criteria = session.createCriteria(CityImpl.class)
.add(Expression.like(FIND_BY_NAME_COLUMN, cityNameToFind))
.addOrder(Order.asc(FIND_BY_NAME_ORDER_COLUMN));
List cityList = criteria.list();
return (City[]) cityList.toArray(new City[cityList.size()]);
} catch (HibernateException he) {
logger.warn("Unable to perform city find by city name", he);
} finally {
this.releaseSession(session);
}
return null;
}
The constants FIND_BY_NAME_COLUMN and FIND_BY_NAME_ORDER_COLUMN both are asigned the String value 'cityName'.
My CityImpl value object have these properties:
Code:
public CityImpl implements City {
private String cityId;
private String cityName;
// Setters and getters
}
The following can be read from the console when running on DEBUG-level:
Code:
16:56:05,501 DEBUG BatcherImpl:192 - about to open: 0 open PreparedStatements, 0 open ResultSets
16:56:05,511 DEBUG BatcherImpl:226 - prepared statement get: select this.cityId as cityId0_, this.cityName as cityName0_ from cities this where this.cityName like ? order by this.cityName asc
Hibernate: select this.cityId as cityId0_, this.cityName as cityName0_ from cities this where this.cityName like ? order by this.cityName asc
16:56:05,511 DEBUG BatcherImpl:232 - preparing statement
16:56:05,581 DEBUG JDBCExceptionReporter:36 - SQL Exception
java.sql.SQLException: ORDER BY clause invalid because it includes a column name that is not part of the result table
at com.mimer.jdbc.Connection.a(Unknown Source)
at com.mimer.jdbc.aa.a(Unknown Source)
at com.mimer.jdbc.Statement.a(Unknown Source)
at com.mimer.jdbc.PreparedStatement.a(Unknown Source)
at com.mimer.jdbc.PreparedStatement.<init>(Unknown Source)
at com.mimer.jdbc.Connection.prepareStatement(Unknown Source)
at org.apache.commons.dbcp.DelegatingConnection.prepareStatement(DelegatingConnection.java:216)
at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.prepareStatement(PoolingDataSource.java:323)
at net.sf.hibernate.impl.BatcherImpl.getPreparedStatement(BatcherImpl.java:233)
at net.sf.hibernate.impl.BatcherImpl.prepareQueryStatement(BatcherImpl.java:61)
at net.sf.hibernate.loader.Loader.prepareQueryStatement(Loader.java:699)
at net.sf.hibernate.loader.Loader.doQuery(Loader.java:180)
at net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:128)
at net.sf.hibernate.loader.Loader.list(Loader.java:918)
at net.sf.hibernate.loader.CriteriaLoader.list(CriteriaLoader.java:109)
at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:3435)
at net.sf.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:177)
at eriksson.andreas.dao.CityDaoImpl.findByName(CityDaoImpl.java:91)
at eriksson.andreas.services.AreaServiceImpl.getCitiesByName(AreaServiceImpl.java:109)
at eriksson.andreas.client.TestClient.main(TestClient.java:65)
16:56:05,591 WARN JDBCExceptionReporter:38 - SQL Error: -12223, SQLState: 42000
16:56:05,591 ERROR JDBCExceptionReporter:46 - ORDER BY clause invalid because it includes a column name that is not part of the result table
16:56:05,611 DEBUG JDBCExceptionReporter:36 - SQL Exception
java.sql.SQLException: ORDER BY clause invalid because it includes a column name that is not part of the result table
at com.mimer.jdbc.Connection.a(Unknown Source)
at com.mimer.jdbc.aa.a(Unknown Source)
at com.mimer.jdbc.Statement.a(Unknown Source)
at com.mimer.jdbc.PreparedStatement.a(Unknown Source)
at com.mimer.jdbc.PreparedStatement.<init>(Unknown Source)
at com.mimer.jdbc.Connection.prepareStatement(Unknown Source)
at org.apache.commons.dbcp.DelegatingConnection.prepareStatement(DelegatingConnection.java:216)
at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.prepareStatement(PoolingDataSource.java:323)
at net.sf.hibernate.impl.BatcherImpl.getPreparedStatement(BatcherImpl.java:233)
at net.sf.hibernate.impl.BatcherImpl.prepareQueryStatement(BatcherImpl.java:61)
at net.sf.hibernate.loader.Loader.prepareQueryStatement(Loader.java:699)
at net.sf.hibernate.loader.Loader.doQuery(Loader.java:180)
at net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:128)
at net.sf.hibernate.loader.Loader.list(Loader.java:918)
at net.sf.hibernate.loader.CriteriaLoader.list(CriteriaLoader.java:109)
at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:3435)
at net.sf.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:177)
at eriksson.andreas.dao.CityDaoImpl.findByName(CityDaoImpl.java:91)
at eriksson.andreas.services.AreaServiceImpl.getCitiesByName(AreaServiceImpl.java:109)
at eriksson.andreas.client.TestClient.main(TestClient.java:65)
16:56:05,611 WARN JDBCExceptionReporter:38 - SQL Error: -12223, SQLState: 42000
16:56:05,611 ERROR JDBCExceptionReporter:46 - ORDER BY clause invalid because it includes a column name that is not part of the result table
16:56:05,621 ERROR JDBCExceptionReporter:38 - SQLException occurred
java.sql.SQLException: ORDER BY clause invalid because it includes a column name that is not part of the result table
at com.mimer.jdbc.Connection.a(Unknown Source)
at com.mimer.jdbc.aa.a(Unknown Source)
at com.mimer.jdbc.Statement.a(Unknown Source)
at com.mimer.jdbc.PreparedStatement.a(Unknown Source)
at com.mimer.jdbc.PreparedStatement.<init>(Unknown Source)
at com.mimer.jdbc.Connection.prepareStatement(Unknown Source)
at org.apache.commons.dbcp.DelegatingConnection.prepareStatement(DelegatingConnection.java:216)
at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.prepareStatement(PoolingDataSource.java:323)
at net.sf.hibernate.impl.BatcherImpl.getPreparedStatement(BatcherImpl.java:233)
at net.sf.hibernate.impl.BatcherImpl.prepareQueryStatement(BatcherImpl.java:61)
at net.sf.hibernate.loader.Loader.prepareQueryStatement(Loader.java:699)
at net.sf.hibernate.loader.Loader.doQuery(Loader.java:180)
at net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:128)
at net.sf.hibernate.loader.Loader.list(Loader.java:918)
at net.sf.hibernate.loader.CriteriaLoader.list(CriteriaLoader.java:109)
at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:3435)
at net.sf.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:177)
at eriksson.andreas.dao.CityDaoImpl.findByName(CityDaoImpl.java:91)
at eriksson.andreas.services.AreaServiceImpl.getCitiesByName(AreaServiceImpl.java:109)
at eriksson.andreas.client.TestClient.main(TestClient.java:65)
16:56:05,621 WARN CityDaoImpl:94 - Unable to perform city find by city name
net.sf.hibernate.JDBCException: SQLException occurred
at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:3438)
at net.sf.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:177)
at eriksson.andreas.dao.CityDaoImpl.findByName(CityDaoImpl.java:91)
at eriksson.andreas.services.AreaServiceImpl.getCitiesByName(AreaServiceImpl.java:109)
at eriksson.andreas.client.TestClient.main(TestClient.java:65)
Caused by: java.sql.SQLException: ORDER BY clause invalid because it includes a column name that is not part of the result table
at com.mimer.jdbc.Connection.a(Unknown Source)
at com.mimer.jdbc.aa.a(Unknown Source)
at com.mimer.jdbc.Statement.a(Unknown Source)
at com.mimer.jdbc.PreparedStatement.a(Unknown Source)
at com.mimer.jdbc.PreparedStatement.<init>(Unknown Source)
at com.mimer.jdbc.Connection.prepareStatement(Unknown Source)
at org.apache.commons.dbcp.DelegatingConnection.prepareStatement(DelegatingConnection.java:216)
at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.prepareStatement(PoolingDataSource.java:323)
at net.sf.hibernate.impl.BatcherImpl.getPreparedStatement(BatcherImpl.java:233)
at net.sf.hibernate.impl.BatcherImpl.prepareQueryStatement(BatcherImpl.java:61)
at net.sf.hibernate.loader.Loader.prepareQueryStatement(Loader.java:699)
at net.sf.hibernate.loader.Loader.doQuery(Loader.java:180)
at net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:128)
at net.sf.hibernate.loader.Loader.list(Loader.java:918)
at net.sf.hibernate.loader.CriteriaLoader.list(CriteriaLoader.java:109)
at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:3435)
... 4 more
16:56:05,641 DEBUG SessionFactoryUtils:179 - Closing Hibernate session
16:56:05,641 DEBUG SessionImpl:544 - closing session
16:56:05,651 DEBUG SessionImpl:3182 - disconnecting session
16:56:05,651 DEBUG SessionImpl:556 - transaction completion
Whats wrong since there really is a column named 'cityName' is a part of the result table?
Running on JDK1.4.2 and Hibernate 2.1 rc1.
Regards, Andreas