我一直有這個方便的問題,我似乎無法解決。我的表名爲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有一個方法,告訴你要引用什麼內容,以便您可以獨立於數據庫。 –