УБРАТЬ стол с помощью Spring Boot - PullRequest
0 голосов
/ 06 февраля 2020

Я хочу выполнить drop запрос таблицы в моей базе данных с использованием пружины JPA (База данных- Postgres)

Это мой код:

public void executeDropTable(String tableName){

    String query = "DROP TABLE IF EXISTS :tableName";

    entityManager.createQuery(query)
            .setParameter("tableName", tableName)
            .executeUpdate();

}

Но в IntelliJ отображается ошибка как 'DROP' unexpected в строке запроса

enter image description here

Любая помощь будет оценена. Спасибо

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

Вы должны получить что-то вроде этого:

java .lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: неожиданный токен: DROP возле строки 1, столбец 1 [ DROP TABLE webinar_speakers]

Инструкция DROP недопустима HQL.

Вместо этого используйте собственный запрос и не забудьте @Transactional:

@Transactional
public void executeDropTable(String tableName) {
    // ...
    entityManager.createNativeQuery(...) // ...
}

Тот факт, что DROP выделен, скорее всего, происходит из плагина Spring Data для IntelliJ, который «знает», что DROP недопустим в этом контексте. Если вы используете createNativeQuery(...) DROP, больше не будут выделяться.

1 голос
/ 06 февраля 2020

EntityManager.createQuery не может использоваться для операторов DML. Используйте EntityManager.createNativeQuery.

...