2012-09-18 62 views
1

我正在遷移到休眠4.1並且還添加了對oracle 11g的支持。遷移到4.1似乎與mysql安裝程序一致,我正在調試oracle特定的問題。我有一個問題,在oracle抱怨休眠不正確格式化oracle sql

java.sql.SQLException: ORA-00903: invalid table name 

我應該提到這個設置也使用c3p0和ehcache。

導致該異常的查詢是:

DEBUG org.hibernate.SQL - 

select 
    dp.id as id168_, 
    dp.Description as Descript2_168_, 
    dp.name as name168_, 
    case 
     when dp1_.id is not null then 1 
     when dp2_.id is not null then 2 
     when dp.id is not null then 0 
    end as clazz_ 
from 
    .tableA dp 
left outer join 
    .tableB dp1_ 
     on dp.id=dp1_.id 
left outer join 
    .tableC dp2_ 
     on dp.id=dp2_.id 

我試圖在SQL Developer的這個查詢,它失敗了。問題似乎與'。'相關。在表名上。如果我刪除這個或在查詢之前把db用戶/模式設置好。

有沒有關閉此設置的設置? 我沒有提供需要的財產嗎?

<properties> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/> 
     <property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver"/> 
     <property name="hibernate.connection.username" value="myUser"/> 
     <property name="hibernate.connection.password" value="myPassword"/> 
     <property name="hibernate.connection.url" value="jdbc:oracle:thin://@192.168.X.X:1521:oracledb"/> 
     <property name="hibernate.archive.autodetection" value=""/> 

     <property name="hibernate.format_sql" value="true"/> 
     <property name="hibernate.show_sql" value="true"/> 
     <property name="hibernate.default_schema" value="public"/> 

     <property name="hibernate.ejb.cfgfile" value="META-INF/hibernate.cfg.xml"/> 

     <!-- cache configuration --> 
     <property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory" /> 
     <property name="hibernate.cache.use_second_level_cache" value="true"/> 
     <property name="hibernate.cache.use_query_cache" value="true"/> 

     <!-- pool configuration --> 
     <property name="hibernate.connection.provider_class" value="org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider" /> 
     <property name="hibernate.c3p0.max_size" value="50" /> 
     <property name="hibernate.c3p0.min_size" value="5" /> 
     <property name="hibernate.c3p0.acquire_increment" value="1" /> 
     <property name="hibernate.c3p0.idle_test_period" value="17" /> 
     <property name="hibernate.c3p0.max_statements" value="0" /> 
     <property name="hibernate.c3p0.timeout" value="3600" /> 
     <property name="hibernate.c3p0.preferredTestQuery" value="SELECT 1 FROM DUAL"/> 

    </properties> 
+0

我有一個預感與hibernate.default_schema屬性有關,但我還沒有完全探索這個 –

+1

您的數據庫名爲'公共'?因爲default_schema是oracle的數據庫名稱。 –

+0

我的模式與用戶相同,我已經更正了這一點,它似乎允許部署artefact。 –

回答

0

這個問題是與

<property name="hibernate.default_schema" value="public"/> 

此值必須與您所創建的模式。

ctapobep的評論幫助確定了這個問題。