[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-4169) @SqlResultSetMapping gives Invalid Column for columns not in select clause

Christina Fisher (JIRA) noreply at atlassian.com
Thu Nov 4 12:03:13 EDT 2010


    [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-4169?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=39012#action_39012 ] 

Christina Fisher commented on HHH-4169:
---------------------------------------

I have a related problem. I have some entities defined with SqlResultSetMapping to be mapped up to the results of native SQL queries. This works fine as the columns returned are an exact match for the properties on the entity. However, if you use generateSchemaUpdateScript() on the Configuration object then it outputs create SQL for tables for these entities. This isn't useful as the entities only exist to hold information gathered from other tables.

> @SqlResultSetMapping gives Invalid Column for columns not in select clause
> --------------------------------------------------------------------------
>
>                 Key: HHH-4169
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-4169
>             Project: Hibernate Core
>          Issue Type: Bug
>          Components: entity-manager
>         Environment: DB: Oracle 10g, OS: Win XP, Hibernate 3 using JPA entitymanager
>            Reporter: Rachit
>
> Hi,
> A very simple usage of SqlResultSetMapping. I want to retrieve only country Name using native query. I have specified one column country name to be fetched and mapped in Object.
> @SqlResultSetMapping(name = "CountryCountry", entities = { @EntityResult(entityClass = Country.class, fields = { @FieldResult(name = "countryName", column = "COUNTRY_NAME") })
>  public void testComplexer0NativeQuery() {
>         em = emf.createEntityManager();
>         Query query = em.createNativeQuery(
>                 "select iso.COUNTRY_NAME from Country iso",
>                 "CountryCountry");
>         List list = query.getResultList();
>         System.out.println(list.size());
>         System.out.println(list.get(0).getClass());
>     }
> Running this I get   "INFO: could not read column value from result set: ISO1_2_0_; Invalid column name" exception. The whole stack trace :
> javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not execute query
> 	at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:614)
> 	at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:76)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:618)
> 	at junit.framework.TestCase.runTest(TestCase.java:168)
> 	at junit.framework.TestCase.runBare(TestCase.java:134)
> 	at org.springframework.test.ConditionalTestCase.runBare(ConditionalTestCase.java:76)
> 	at junit.framework.TestResult$1.protect(TestResult.java:110)
> 	at junit.framework.TestResult.runProtected(TestResult.java:128)
> 	at junit.framework.TestResult.run(TestResult.java:113)
> 	at junit.framework.TestCase.run(TestCase.java:124)
> 	at junit.framework.TestSuite.runTest(TestSuite.java:232)
> 	at junit.framework.TestSuite.run(TestSuite.java:227)
> 	at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:81)
> 	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
> 	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
> Caused by: org.hibernate.exception.GenericJDBCException: could not execute query
> 	at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126)
> 	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114)
> 	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
> 	at org.hibernate.loader.Loader.doList(Loader.java:2231)
> 	at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125)
> 	at org.hibernate.loader.Loader.list(Loader.java:2120)
> 	at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:312)
> 	at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1722)
> 	at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165)
> 	at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:175)
> 	at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:67)
> 	... 21 more
> Caused by: java.sql.SQLException: Invalid column name
> 	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
> 	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
> 	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269)
> 	at oracle.jdbc.driver.OracleStatement.get_column_index(OracleStatement.java:6348)
> 	at oracle.jdbc.driver.OracleResultSetImpl.findColumn(OracleResultSetImpl.java:1557)
> 	at oracle.jdbc.driver.OracleResultSet.getString(OracleResultSet.java:1549)
> 	at org.hibernate.type.StringType.get(StringType.java:41)
> 	at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:184)
> 	at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:173)
> 	at org.hibernate.loader.Loader.getKeyFromResultSet(Loader.java:1121)
> 	at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:588)
> 	at org.hibernate.loader.Loader.doQuery(Loader.java:724)
> 	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
> 	at org.hibernate.loader.Loader.doList(Loader.java:2228)
> 	... 28 more
> Hibernate is trying to fetch all the columns present in entity to create the object. I am only interested in column/s I have specified in "@FieldResult".
> If I retrieve all fields in entity, It works fine though.
> Thanks and Regards.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list