2015-02-06 45 views
2

我將Eclipse中的開發環境從Windows遷移到Debian。當我這樣做時,我注意到當Hibernate在初始化過程中進行數據模型檢查時,由於區分大小寫問題,在MySQL中沒有找到(只是一些)表名。其中兩個表仍由「Table_name」而不是「table_name」搜索。當它發生時,Hibernate會創建新的表「Table_name」,忽略現有的「table_name」表。我讀到這是由於MySQL中的大小寫敏感的功能。MySQL通過Hibernate在Linux中區分大小寫

我在每個模型類中添加了@Table(name="table_name")語句,以避免MySQL/Hibernate對錶名進行大寫,並且我審查了DAO類中的所有HQL查詢,並將所有表引用都設置爲小寫,但我沒有在任何一次嘗試中取得成功

爲了解決這個問題,我錯過了什麼配置?謝謝。

+0

嗯,亞歷克斯,發生了什麼事?你有沒有得到它的工作? – 2015-02-09 10:51:24

回答

2

這是MySQL衆所周知的問題,因爲它會爲每個表創建實際的磁盤文件。

Hibernate據稱試圖通過內部降低所有表名來克服這個問題,但顯然這不是一個防彈解決方案。

據我所知,除了確保統一的大寫字母在任何地方都可以使用之外,您無法做任何事情。換句話說,沒有魔術配置選項可以爲你做。

如果您使用「hibernate.hbm2ddl.auto」屬性讓hibernate創建您的數據庫模式,那麼您應該沒問題,但是如果您在預先存在的數據庫上運行hibernate,那麼這是不夠的,因爲您還必須確保該表是以'table_name'創建的,並且任何外鍵引用也都將其稱爲'table_name'。 (因此,@Table(name="table_name")無處不在)。

無論哪種情況,您的數據庫都是在windows下創建的,所以即使您使用hibernate創建它,仍然可能使用任何有趣的大寫方案創建了它在windows下使用,這意味着你可能想扔掉你的數據庫並重新創建它。

+0

感謝您的回覆。事實上,我沒有照顧外鍵。也許我會轉儲所有數據並重新創建數據庫。在另一個問題上,在這裏,在stackoverflow的建議我改變爲InteliJ。我甚至安裝了它,但我的日程安排已經晚了,我沒有足夠的時間去完成另一條學習曲線。 Linux實際上讓Eclipse(很多)更快,我不知道爲什麼。在Windows中,Eclipse性能在O.S.之後變得糟糕透頂。重新安裝。也許在我的下一個項目中,我會轉向InteliJ。謝謝您的回答。 – Alex 2015-02-09 18:05:59

+0

當然,很高興能有所幫助。如果您有明確的答案,請將您的發現發佈給未來的程序員。 – 2015-02-09 18:16:29

+1

有必要注意一個重要的問題,這對於程序員的「後代」是有價值的:在我的項目中,我們稱之爲項目A,另一個項目的引用,通過Maven調用項目B.當我在項目B中進行更改時,我忘記通過Maven Install更新.jar文件,然後更新項目A引用。這樣一來,在項目A建築中,存儲在過時的.jar中的舊錶名成爲問題的根源。 – Alex 2015-02-09 19:59:29