以关键字作为名称截断 table
Truncating table with keyword as name
我一直遇到这个似乎无法解决的便利问题。我的 table 调用 Plan
不会截断。
table 实体如下所示:
@Entity
@Table(name = "`Plan`")
public class TablePlan {
...
}
在单元测试之间我需要截断这个 table:
@After
public void resetDatabase(){
EntityManager em = objectRegistration.getEntityManager();
em.getTransaction().begin();
em.createNativeQuery("truncate table Plan").executeUpdate();
em.getTransaction().commit();
}
由于 Plan
是 MSSQL 中的关键字,我需要用反引号将 "Plan" 括起来,正如您在实体 table 名称中看到的那样。我目前只是使用 hibernate 来测试我的方法,这不需要我用反引号将 "Plan" 括起来,但是由于这段代码是用于实际数据库的,所以我不想更改它。
我也无法在任何地方更改任何名称,因为这是一个包含数百万条目的现有数据库。
我已经试过这样截断它了:
em.createNativeQuery("truncate table `Plan`").executeUpdate();
但这似乎行不通,在网上搜索了一个小时但不知道究竟要搜索什么之后,我想让我们使用这个 SO 帐户来改变一下吧!我已经将代码调试到我 100% 确定截断更新查询根本不会执行的程度,因为它截断了一些不存在的 table。因此我的 "Plan" table 没有被识别。
如果您需要更多信息,我会尽量在此处提供。
提前感谢您阅读本文=)
*****解决方案*****
更改 table 名称:
@Table(name = "\"Plan\"")
并更改截断查询:
em.createNativeQuery("truncate table \"Plan\"").executeUpdate();
瞧瞧!
反引号在 SQL 服务器中不是转义字符。
在SQL 服务器中,table 不符合常规标识符规则的名称(https://msdn.microsoft.com/en-us/library/ms175874.aspx) 必须用方括号或双引号引起来。双引号是 ANSI 标准附件。
我一直遇到这个似乎无法解决的便利问题。我的 table 调用 Plan
不会截断。
table 实体如下所示:
@Entity
@Table(name = "`Plan`")
public class TablePlan {
...
}
在单元测试之间我需要截断这个 table:
@After
public void resetDatabase(){
EntityManager em = objectRegistration.getEntityManager();
em.getTransaction().begin();
em.createNativeQuery("truncate table Plan").executeUpdate();
em.getTransaction().commit();
}
由于 Plan
是 MSSQL 中的关键字,我需要用反引号将 "Plan" 括起来,正如您在实体 table 名称中看到的那样。我目前只是使用 hibernate 来测试我的方法,这不需要我用反引号将 "Plan" 括起来,但是由于这段代码是用于实际数据库的,所以我不想更改它。
我也无法在任何地方更改任何名称,因为这是一个包含数百万条目的现有数据库。
我已经试过这样截断它了:
em.createNativeQuery("truncate table `Plan`").executeUpdate();
但这似乎行不通,在网上搜索了一个小时但不知道究竟要搜索什么之后,我想让我们使用这个 SO 帐户来改变一下吧!我已经将代码调试到我 100% 确定截断更新查询根本不会执行的程度,因为它截断了一些不存在的 table。因此我的 "Plan" table 没有被识别。
如果您需要更多信息,我会尽量在此处提供。
提前感谢您阅读本文=)
*****解决方案*****
更改 table 名称:
@Table(name = "\"Plan\"")
并更改截断查询:
em.createNativeQuery("truncate table \"Plan\"").executeUpdate();
瞧瞧!
反引号在 SQL 服务器中不是转义字符。
在SQL 服务器中,table 不符合常规标识符规则的名称(https://msdn.microsoft.com/en-us/library/ms175874.aspx) 必须用方括号或双引号引起来。双引号是 ANSI 标准附件。