2013-10-10 54 views
0

我用hibernate的oracle 11g。 Hibernate被配置爲在啓動時驗證模式,但由於某些原因,它無法找到一個表並失敗。DatabaseMetataData沒有看到表

我有一個奇怪的情況,其中java.sql.DatabaseMetaData看到來自同一模式的其他表時看不到一個表(getTables返回空結果集)。

所以我有以下情況:

String[] TYPES = {"TABLE", "VIEW"}; 
DatabaseMetaData meta = ... 
meta.getTables(null, "SCHEMA_NAME", "TABLE1", TYPES).next(); // true 
meta.getTables(null, "SCHEMA_NAME", "TABLE2", TYPES).next(); // false 

但下列查詢執行成功:

select * from schemaName.table1 
select * from schemaName.table2 

更多我可以查詢字典表,看看這兩個表:

select * from user_tables where table_name in ('TABLE1', 'TABLE2') 

可能是什麼原因?

+0

是它的代名詞,或者是表名字實際上'TABLE2'('getTables'要求案件完全匹配)? –

+0

@MarkRotteveel,這不是同義詞,我可以在'USER_TABLES'中看到該表 –

回答

2
DatabaseMetaData md = connection.getMetaData(); 
ResultSet rs = md.getTables(null, null, "%", null); 
while (rs.next()) { 
    System.out.println(rs.getString(3)); 
} 

嘗試上面的代碼

列3代表TABLE_NAME 點擊知道所有的列numbers

+0

只有包含代碼的答案對於閱讀此問題的類似但不完全相同的其他人來說沒有用處。因此,它對於SO沒有用處。 – Sumurai8

+0

@ Sumurai8希望它現在會很有用 – SpringLearner

+0

我檢查了這個連接是否可見,它是。這很奇怪,爲什麼它在應用程序中不可見? –