我一直有这个方便的问题,我似乎无法解决。我的表名为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来测试我的方法,这不需要我用“引号”来包围反引号,但是因为这段代码是针对实际的数据库的,所以我不想改变它。
我也无法在任何地方更改任何名称,因为这是一个有数以万计条目的现有数据库。
我已经尝试截断它是这样的:
em.createNativeQuery("truncate table `Plan`").executeUpdate();
但是,这似乎并没有工作,在网上搜索,不知道究竟要搜索什么样的一个小时后,我想通让我们所以用这个考虑改变!我已经将代码调试到100%确定的地步,truncate update query根本不执行,因为它截断了一些不存在的表。因此我的“计划”表不被识别。
如果您需要更多信息,我会尽力在此提供。
预先感谢您阅读本=)
***** SOLUTION *****
更改表名称:
@Table(name = "\"Plan\"")
并更改截断查询:
em.createNativeQuery("truncate table \"Plan\"").executeUpdate();
等瞧!
你是对的。我只加了后面的引号,因为我被告知在别的地方这会解决我的sql问题。现在使用双引号,单元测试再次运行。仍然需要测试我的mssql服务器,是否仍然有效=) –
也适用于mssql,谢谢!将在问题中更新我的代码 –
FWIW JDBC DatabaseMetadata有一个方法,告诉你要引用什么内容,以便您可以独立于数据库。 –