2015-07-21 3 views
0

У меня возникла такая проблема удобства, с которой я не могу справиться. Моя таблица с именем Plan не будет усекать. Субъект таблица выглядит следующим образом:Усекающий стол с ключевым словом как имя

@Entity 
@Table(name = "`Plan`") 
public class TablePlan { 
    ... 
} 

А между блоком тестов мне нужно укоротить эту таблицу:

@After 
public void resetDatabase(){ 
    EntityManager em = objectRegistration.getEntityManager(); 
    em.getTransaction().begin(); 

    em.createNativeQuery("truncate table Plan").executeUpdate(); 
    em.getTransaction().commit(); 
} 

Поскольку Plan является ключевым словом в MSSQL, мне нужно, чтобы окружить «план» с назад, как вы можете видеть в имени таблицы сущностей. В настоящее время я просто использую hibernate для тестирования своих методов, что не требует, чтобы я окружал «Plan» с кавычками, но поскольку этот код предназначен для реальной базы данных, я не хочу его менять.

Я также не могу изменить ни одного имени в любом месте, так как это существующая база данных с milions записей.

Я уже пытался укоротить его так:

em.createNativeQuery("truncate table `Plan`").executeUpdate(); 

Но это не похоже на работу и после часа поиска в Интернете и не зная точно, что искать, я понял, давайте использовать этот SO учтите изменение! Я уже отлаживал код до такой степени, что я на 100% уверен, что запрос обновления truncate просто не выполняется, поскольку он обрезает некоторую несуществующую таблицу. Поэтому моя таблица «План» не распознается.

Если вам нужна дополнительная информация, я постараюсь предоставить его здесь.

Заранее спасибо за чтение этого =)

***** ***** РЕШЕНИЕ

Изменить имя таблицы:

@Table(name = "\"Plan\"") 

И изменить запрос усечь:

em.createNativeQuery("truncate table \"Plan\"").executeUpdate(); 

Et voila!

ответ

2

Обратная цитата не является символом escape в SQL Server.

В SQL Server имена таблиц, которые не соответствуют правилам для обычных идентификаторов (https://msdn.microsoft.com/en-us/library/ms175874.aspx), должны быть заключены в квадратные скобки или двойные кавычки. Двойными кавычками является стандартное приложение ANSI.

+0

Вы верны. Я добавил только обратные кавычки, потому что мне сказали где-то еще, что это исправит мои проблемы с sql. Используемые двойные кавычки теперь и модульные тесты снова запускаются. Все еще нужно протестировать мой сервер mssql, независимо от того, работает ли он еще так же =) –

+0

Работает и на mssql, спасибо! Будет обновлен мой код в вопросе –

+0

FWIW JDBC DatabaseMetadata имеет метод, который сообщает вам, что котировать вещи, поэтому вы можете стать независимым от базы данных. –

Смежные вопросы