Как я могу скопировать «ПОКАЗАТЬ ТАБЛИЦЫ» в Hibernate? - PullRequest
3 голосов
/ 20 августа 2009

Я пытаюсь перебрать все мои таблицы, чтобы я мог обрезать каждую из них (в начале каждого из моих тестов JBehave).

Я думал, что смогу:

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

Но hibernate выдает исключение SQLGrammarException, сообщая, что "Столбец" TABLE_NAME "не найден."

Я полагаю, это потому, что запрос "show tables" на самом деле не возвращает список строк. Есть ли другой способ получить список всех моих таблиц, используя Hibernate?

Ответы [ 3 ]

5 голосов
/ 22 октября 2010

Попробуйте что-то вроде этого:

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
1 голос
/ 20 августа 2009

Если у вас все еще есть доступ к объекту конфигурации 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)
1 голос
/ 20 августа 2009

Если вы хотите обрезать всю таблицу, вы можете установить hibernate.hbm2ddl.auto в hibernate.cfg.xml по значению Create.

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

но если вы хотите просто получить все имена таблиц и урезать некоторые из них, этот метод не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...