2009-08-20 10 views
3

私はすべてのテーブルを反復しようとしていますので、私は各テーブルを切り捨てることができます(各JBehaveテストの冒頭)。Hibernateで "SHOW TABLES"をどのように複製できますか?

私は私のことができるようにだろうと思った:

List<String> allTables = session.createSQLQuery("SHOW TABLES").list(); 

しかし、冬眠することを訴えて、SQLGrammarExceptionを投げる "列' TABLE_NAME 'が見つかりません。"

"show tables"クエリが実際に文字列のリストを返さないためです。 Hibernateを使用しているすべてのテーブルのリストを取得する別の方法はありますか?

答えて

1

すべてのテーブルを切り捨てたい場合は、値hibernate.cfg.xmlにhibernate.hbm2ddl.autoを設定することができます。

<property name="hbm2ddl.auto">create</property> 

あなただけのすべてのテーブル名を取得し、それらのいくつかは、この方法では動作しません切り捨てたい場合。

1

あなたはまだHibernate構成オブジェクトへのアクセス権を持っている場合は、あなたがこれを行うことができますが:

for (Iterator iter=configuration.getClassMappings(); iter.hasNext();) { 
    PersistentClass persistentClass = (PersistentClass)iter.next(); 
    String table = persistentClass.getTable().getName(); 
    // Code to truncate table (or just use a query with session.executeUpdate) 
} 

あなたは、エンティティごとに一つのテーブルを持っているし、あなただけのマッピングされたテーブルを気に想定しています。そうしないと、あなたはおそらく例えば、基になる接続とのDatabaseMetaDataで何かをする必要があります。

session.connection().getMetaData().getTables(catalog, schemaPattern, tableNamePattern, types) 
5

このような何か試してみてください:列の場合

SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE(); 

(Hibernateで同じ状況)してみてください:

SELECT column_name FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME=YOUR_TABLE_NAME 
+0

ありがとうございます。 – Charles

関連する問題