我們的系統中有一個大表business_apply。它用於存儲業務應用信息,幷包含數百個列。Java orm問題
當業務類型不同時,列可能意味着不同的事情。
什麼樣的orm框架可以讓我們的生活更輕鬆?休眠,iBatis或其他?
我們的系統中有一個大表business_apply。它用於存儲業務應用信息,幷包含數百個列。Java orm問題
當業務類型不同時,列可能意味着不同的事情。
什麼樣的orm框架可以讓我們的生活更輕鬆?休眠,iBatis或其他?
根據您的描述您正在使用「錯誤的」 DB模式:(!)的列
因此,hibernate不適合你。該工具適用於「正確」的解決方案。 Hibernate不能幫你太多,因爲它不能將你的數據映射到java對象。您需要某種自定義的映射實現。
我認爲你需要普通的JDBC或像雅加達的DBUtils這樣的非常簡單的幫助器。一旦你連接到數據庫,並設法訪問你的大表實現一個自定義的機制(可能是每個業務),將你的大部分數據映射到你的值對象。
:D對不起我的英文!是的,將我們的數據庫模式映射到java Objects幾乎是不可能的。整個系統是在10多年前設計的,而我是我們公司的新手,我想做一些改變。 – idiotgenius 2010-12-14 13:22:12
您可以檢出Cayenne。
看一看http://cayenne.apache.org/doc30/scripting-sqltemplate.html 和 http://cayenne.apache.org/doc30/data-rows.html
這種方式,你仍然可以從ORM API中獲益,而不會犧牲速度。
我認爲你的設計聽起來像是需要一些規範化。根據其他列改變其含義的列表聽起來像是理解和維護的噩夢。
就這樣說,我認爲任何持久性解決方案都可以工作。使用Hibernate不會讓你擺脫困難,想出一個好的對象模型來映射數據。您的物體模型將比桌子更細。您可以使用任何您熟悉的技術將數據映射到對象中,並將修改的對象加載回表中。
但首先你必須有對象。
IBatis非常適合讓你做手動SQL,讓你手動控制處理表設計,這可能不適合ORM處理。
JPA - 任何實現都可以。使用單表繼承策略來適應單個表中的所有類。您需要識別鑑別器列。你應該能夠在多個子類中使用相同的列來表示不同的東西(也許 - 無論如何它值得一試)。
休眠我會建議, – 2010-12-14 12:18:56
但hibernate如何處理這樣的問題?爲每種業務類型創建一個Model類? – idiotgenius 2010-12-14 12:26:21