2009-08-20 6 views
3

각 테이블을 반복하여 각 테이블을 잘라낼 수 있습니다 (JBehave 테스트가 시작될 때마다).Hibernate에서 "SHOW TABLES"를 어떻게 복제 할 수 있습니까?

나는 내가 할 수있을 것이라고 생각했다. "열 ' TABLE_NAME ' 찾을 수 없습니다"

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

그러나 불평하는 SQLGrammarException를 throw 최대 절전 모드

"show tables"쿼리가 실제로 문자열 목록을 반환하지 않기 때문입니다. Hibernate를 사용하여 모든 테이블 목록을 얻는 다른 방법이 있습니까?

답변

1

모든 테이블을 자르려면 hibernate.cfg.xml에 hibernate.hbm2ddl.auto을 값 Create로 설정할 수 있습니다.

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

그러나 모든 테이블 이름을 가져오고 일부만 자르기를 원할 경우이 방법은 작동하지 않습니다. 당신은 여전히 ​​최대 절전 모드 구성 개체에 액세스 할 수있는 경우

1

, 당신은이 작업을 수행 할 수 있습니다 : 당신은 개체 당 하나 개의 테이블을 가지고 있고 당신은 단지 매핑 된 테이블에 대해 신경 가정

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) 
} 

합니다.

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

이 같은 시도 : (최대 절전 모드와 같은 상황) 컬럼에 대한

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

을 시도 :

을 그렇지 않으면, 당신은 아마 기본 연결과 DatabaseMetaData의, 예를 들어 뭔가를 할 필요가
SELECT column_name FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME=YOUR_TABLE_NAME 
+0

감사합니다. – Charles

관련 문제