jpa 使用Sping Boot 删除表

2vuwiymt  于 2023-08-06  发布在  其他
关注(0)|答案(2)|浏览(152)

我想使用Spring JPA在我的数据库上执行drop表查询(数据库-Postgres
下面是我的代码:

public void executeDropTable(String tableName){

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

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

}

字符串
但在IntelliJ中,在查询字符串上显示错误为'DROP' unexpected
x1c 0d1x的数据

p5fdfcr1

p5fdfcr11#

你应该得到这样的东西:
异常错误:org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:第1行第1列附近的DROP [DROP TABLE webinar_speakers]
DROP语句不是有效的HQL。
使用原生查询,不要忘记@Transactional

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

字符串
DROP被突出显示的事实很可能来自于IntelliJ的Spring Data插件,它“知道”DROP在此上下文中无效。如果您使用createNativeQuery(...)DROP将不再突出显示。

qij5mzcb

qij5mzcb2#

EntityManager.createQuery不能用于DML语句。使用EntityManager.createNativeQuery。

相关问题