1 Reply Latest reply on Sep 17, 2007 3:47 AM by rubenmartinramos

    SQLGrammarException: could not load an entity

    victoriaonsand

      Hi,

      When using JBoss 4.0.5 with Oracle an exception occured while quering a quite complex object from database. Hibernate constructs a query that is not compatible with Oracle: ' select .... from T_COLUMN_TYPE as a14 ..'. It looks like that an other than Oracle9Dialect is taken somewhere.

      2007-03-07 14:16:47,980 INFO [STDOUT] Hibernate: select tabletype0_.name as name9_1_, columns1_.NAME as NAME3_, columntype2_.COLUMN_NAME as COLUMN2_3_, (select a14.COLUMN_NAME from T_COLUMN_TYPE as a14 where a14.COLUMN_NAME=columns1_.COLUMN_NAME) as formula0_3_, columntype2_.COLUMN_NAME as COLUMN1_2_0_,
      columntype2_.PREDICTOR_INTERNAL_NAME as PREDICTOR2_2_0_, columntype2_.DATA_TYPE as DATA3_2_0_ from T_Table_Type tabletype0_ left outer join T_TABLE_COLUMN_TYPE co
      lumns1_ on tabletype0_.name=columns1_.NAME left outer join T_COLUMN_TYPE columntype2_ on columns1_.COLUMN_NAME=columntype2_.COLUMN_NAME where tabletype0_.na
      me=?
      2007-03-07 14:16:47,993 WARN [org.hibernate.util.JDBCExceptionReporter] SQL Error: 907, SQLState: 42000
      2007-03-07 14:16:47,993 ERROR [org.hibernate.util.JDBCExceptionReporter] ORA-00907: Rechte Klammer fehlt
      
      2007-03-07 14:16:47,998 INFO [org.hibernate.event.def.DefaultLoadEventListener] Error performing load command
      org.hibernate.exception.SQLGrammarException: could not load an entity: [de.web.mf.tgp.tgpmanager.entity.TableType#PostScore.WEB_AFFINITY.wirtschaft]
       at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
       at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
       at org.hibernate.loader.Loader.loadEntity(Loader.java:1798)
       at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:48)
       at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:42)
       at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:2977)
       at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:393)
       at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:374)
       at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:137)
       at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:193)
       at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:101)
       at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:878)
       at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:846)
       at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:266)
       at org.hibernate.type.EntityType.resolve(EntityType.java:303)
       at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:116)
       at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:842)
       at org.hibernate.loader.Loader.doQuery(Loader.java:717)
       at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
       at org.hibernate.loader.Loader.doList(Loader.java:2144)
       at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2028)
       at org.hibernate.loader.Loader.list(Loader.java:2023)
       at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:393)
       at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
       at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
       at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
       at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
       at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:80)
       at de.web.mf.tgp.tgpmanager.persistence.PersistenceManager.findModelByName(PersistenceManager.java:145)
      


      The following persistence.xml file defines to use Oracle9Dialect.

      persistence.xml:
      <persistence>
       <persistence-unit name="tgp">
       <jta-data-source>java:/OracleDS_TGP</jta-data-source>
       <properties>
       <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9Dialect" />
       <property name="hibernate.hbm2ddl.auto" value="create-drop" />
       <property name="hibernate.cache.use_query_cache" value="true" />
       <property name="hibernate.show_sql" value="true" />
       <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider" />
       </properties>
       </persistence-unit>
      </persistence>
      



      While deploying the ear a strange sequence of log statements are shown:
      "Using dialect: org.hibernate.dialect.HSQLDialect". Later down you can see that Oracle JDBC driver gets inititialized.

      2007-03-07 14:08:47,865 INFO [org.hibernate.cfg.AnnotationBinder] Binding entity from annotated class: de.web.mf.tgp.tgpmanager.entity.ThreshholdNullRule
      2007-03-07 14:08:47,864 INFO [org.hibernate.cfg.annotations.EntityBinder] Bind entity de.web.mf.tgp.tgpmanager.entity.ThreshholdNullRule on table T_Threshh
      old_Null_Rule
      2007-03-07 14:08:48,119 INFO [org.hibernate.dialect.Dialect] Using dialect: org.hibernate.dialect.HSQLDialect
      2007-03-07 14:08:48,133 INFO [org.hibernate.dialect.Dialect] Using dialect: org.hibernate.dialect.HSQLDialect
      2007-03-07 14:08:48,141 INFO [org.hibernate.cfg.annotations.CollectionBinder] Mapping collection: de.web.mf.tgp.tgpmanager.entity.Project.models -> T_MODEL
      2007-03-07 14:08:48,141 INFO [org.hibernate.cfg.annotations.CollectionBinder] Mapping collection: de.web.mf.tgp.tgpmanager.entity.User.models -> T_MODEL
      2007-03-07 14:08:48,143 INFO [org.hibernate.cfg.annotations.CollectionBinder] Mapping collection: de.web.mf.tgp.tgpmanager.entity.Mandator.models -> T_MODE
      L
      2007-03-07 14:08:48,144 INFO [org.hibernate.cfg.annotations.CollectionBinder] Mapping collection: de.web.mf.tgp.tgpmanager.entity.TableType.tableProcessing
      Rules -> T_Table_Processing_Rule
      2007-03-07 14:08:49,470 INFO [org.hibernate.connection.ConnectionProviderFactory] Initializing connection provider: org.hibernate.ejb.connection.InjectedDa
      taSourceConnectionProvider
      2007-03-07 14:08:49,485 INFO [org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider] Using provided datasource
      2007-03-07 14:08:49,526 INFO [org.hibernate.cfg.SettingsFactory] RDBMS: Oracle, version: Oracle9i Enterprise Edition Release 9.2.0.6.0 - 64bit Production
      With the Partitioning, OLAP and Oracle Data Mining options
      JServer Release 9.2.0.6.0 - Production
      2007-03-07 14:08:49,528 INFO [org.hibernate.cfg.SettingsFactory] JDBC driver: Oracle JDBC driver, version: 10.2.0.2.0
      2007-03-07 14:08:49,541 INFO [org.hibernate.dialect.Dialect] Using dialect: org.hibernate.dialect.Oracle9Dialect
      2007-03-07 14:08:49,545 INFO [org.hibernate.transaction.TransactionFactoryFactory] Transaction strategy: org.hibernate.ejb.transaction.JoinableCMTTransactionFactory
      



      I am using JBoss 4.0.5 which comes with EJB3-RC7. When trying RC9 the problem still remains.

      Could somebody what's wrong?




        • 1. Re: SQLGrammarException: could not load an entity
          rubenmartinramos

          i have the same problem, did you find a solution?.
          I have an entity field witch is combine by select of 3 tables .
          I use this kind of line in the mapping file :
          <property formula="( select .... ) and this select use 3 tables to get the value . ...>
          i have the same error :::

          [JDBCExceptionReporter] SQL Error: 907, SQLState: 42000
          09:24:10,196 ERROR [JDBCExceptionReporter] ORA-00907:...

          Could you mind to help me?

          Thanks in advance .