gpt4 book ai didi

java - 以关键字作为名称截断表

转载 作者:行者123 更新时间:2023-12-02 04:30:31 25 4
gpt4 key购买 nike

我一直遇到这个我似乎无法解决的便利问题。我的名为 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 中的关键字,因此我需要用反引号将“Plan”括起来,正如您在实体表名称中看到的那样。我目前只是使用 hibernate 来测试我的方法,这不需要我用反引号将“Plan”引起来,但由于此代码适用于实际数据库,因此我不想更改它。

我也无法在任何地方更改任何名称,因为这是一个包含数百万条目的现有数据库。

我已经尝试像这样截断它:

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

但这似乎不起作用,在网上搜索了一个小时但不知道到底要搜索什么之后,我想让我们使用这个 SO 帐户进行更改!我已经将代码调试到我 100% 确定截断更新查询根本不会执行的程度,因为它截断了一些不存在的表。因此我的“计划”表无法被识别。

如果您需要更多信息,我会尽力在此处提供。

预先感谢您阅读本文 =)

*****解决方案*****

更改表名称:

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

并更改截断查询:

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

瞧瞧!

最佳答案

反引号不是 SQL Server 中的转义字符。

在 SQL Server 中,不符合常规标识符 ( https://msdn.microsoft.com/en-us/library/ms175874.aspx ) 规则的表名称必须用方括号或双引号括起来。双引号是 ANSI 标准括起来。

关于java - 以关键字作为名称截断表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31538645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com