2016-02-24 42 views
0

現在,由於複製粘貼,我創建了兩個具有相同表名的JPA實體。即:通過單元/集成測試檢測重複表名

@Table(name = "myfirsttable") 
public class MyFirstTable { @Id @Column private Long id; } 

@Table(name = "myfirsttable") 
public class MySecondTable { @Id @Column private Integer id; } 

我正在使用Spring Test,這意味着幸運的是,至少有一個測試失敗時,我這樣做。麻煩的是我看到的失敗會抱怨數據類型。例如,在上面,我會看到從HibernateJpaAutoConfiguration.class引發的異常,例如的expected int but found bigint。如果我看一下應該是myfirsttable的課程,我會感到困惑(我很容易混淆),想「但它說這是一個Long,所以bigint肯定是正確的映射?」我可能需要一段時間才能弄清楚爲什麼我會看到這條信息。同樣,堆棧跟蹤可能會提到無法找到一個字段。

到目前爲止,只有幾次我覺得有必要創建兩個指向同一個表的不同實體,以便覆蓋99%的情況下兩個實體指向同一個表的方法是一個錯誤,我想知道是否有一個簡單的方法來設置一個測試,這會失敗,告訴我,我已經創建了一個重複的表名稱。我正在考慮一個可以放入我所有項目的測試,這可以給我一個有用的警告來確定這個問題。

回答

1

有2個選項,我可以看到:

你可以創建一個測試,這將只是嘗試並加載您的ApplicationContext。如果失敗了,那就錯了。不幸的是,爲了找出究竟是什麼錯誤,你必須挖掘日誌。

另一種選擇是編寫一個測試,該測試將查看所有帶有@Table註解的類,並查看是否有多個表具有相同的表名。我在我的一個項目中使用類似的測試來確保沒有實體類使用基元。有libriares,使它更容易掃描具有某些註釋的類。

+0

加載'ApplicationContext'是我看到當前錯誤的地方。問題更多的是關於檢測可能的重複'@ Table'註釋的錯誤。我可以看看手動掃描「@ Table」註釋類。我不會認爲這太棘手...... – Steve