2012-01-17 63 views
1

我一直在使用Hibernate很多年,從來沒有遇到任何問題,但只是意識到我的大部分工作都涉及CRUD方法,我需要數據來保持持久化和修改隨意。用於僅插入/僅查詢應用程序的ORM框架

問題在於有人希望製作2個獨立的應用程序,一個批量插入,另一個對插入的數據執行搜索。

由於在這種情況下持久性有點無用,團隊不希望使用Hibernate,而是在插入應用程序上使用原始查詢,也可能在查詢應用程序上使用類似jOOQ的東西。

這是正確的電話嗎?或者我怎麼說服他們使用Hibernate,而不是「我最喜歡的orm框架」?還是有沒有其他解決方案沒有考慮到?

+0

看起來好像你試圖讓Hibernate進入一個它不適合的洞,或者至少試圖讓一個胖子變成一個瘦人。 – AHungerArtist 2012-01-17 23:37:03

+0

+1爲好比喻,所以你們,我會讓Hibernate減肥或者使用更薄的東西,因爲純粹沒有ORM就太瘦了 – javaNoober 2012-01-18 01:43:33

回答

4

聲明:我是jOOQ的創造者,因此,這個答案有點偏頗。

jOOQ正是爲您的同事提到的用例而精心設計的。在你的項目中,你不是在做OLTP(CRUD),而是OLAP,這在許多方面對於jOOQ來說是非常好的用例。 jOOQ鼓勵使用OLAP功能,比如窗口函數,數據透視表,遞歸查詢,存儲過程,數組和非目標數組等等。jOOQ還支持13個不同的數據庫,包含所有您希望避免的SQL兼容性細節。一些例子:

  • LIMIT .. OFFSET/TOP .. START AT,etc子句是如何映射到數據庫的?
  • 變量如何綁定(有或沒有鑄造)?
  • 如何支持內置函數?
  • 派生表是否需要用圓括號包裝?

儘管如此,所有這些兼容性方面也都涵蓋了Hibernate。所以,你的問題涉及回落到這個:

  • 你想使用Hibernate這是不完美的技術選擇,但你知道哪個好,因此可以估算的風險?如果團隊中的每個人都知道並喜歡Hibernate,並且很少有時間學習新事物,那麼這就是要走的路。

  • 或者你是否想要使用不同的框架,可能更適合,但是你不太瞭解它,因此無法估計所有風險?如果你是唯一支持Hibernate的人,並且你有時間學習新的框架,這可能是一條路。其他框架,你可能要考慮:

  • 或者你也可以混合使用技術和使用Hibernate的簡單查詢和普通的SQL/jOOQ /春/ MyBatis的/等,爲更復雜的。

  • 或者您可以使用存儲過程處理批量處理和OLAP查詢(例如,如果您使用的是Oracle中的PL/SQL),並讓數據庫執行該操作?如果你的團隊中有一位優秀的DBA或數據庫專家,這可能是一條路。

沒有正確或錯誤的答案。但你必須做出務實的決定。

+0

以前從未聽說過jOOQ - 看起來很漂亮。 – AHungerArtist 2012-01-18 12:39:39

+0

感謝您的回答,我認爲這是對OLTP/OLAP和我們團隊需要考慮的一個非常可靠的解釋。 – javaNoober 2012-01-19 01:50:23

+0

@javaNoober:謝謝。我想,如果你可以在這裏發佈你的最終團隊決定作爲一個額外的答案,那麼這個問題的未來訪問者將會很有趣! – 2012-01-19 07:55:44

1

Hibernate是一個對象關係映射。如果他們只對原始數據流進行批量插入和報告,那麼他們可能不需要任何對象表示。如果需要某種對象表示形式的數據,Hibernate會派上用場。

+0

我意識到這一點,但是我們有很多關於「手工製作SQL「層和不同的數據庫可移植性,我真的希望我們所有人都能使用對象表示,但我認爲Hibernate可能太大了 – javaNoober 2012-01-18 01:51:49

1

這是非常可能的。 Hibernate可以很好地處理由其他應用程序同時更新的數據庫。唯一的問題是Hibernate的內部緩存超時。這意味着在數據庫中更新的記錄與Hibernate查看更新的數據之間可能會稍微延遲(幾分鐘)。我相信這是可配置的。

任何優於Hibernate JooQ的參數都將是應用程序對數據進行概念化的一個參數。 Hibernate將數據的行表示抽象爲對象。有些程序員不喜歡那樣,寧願親手做。這可能是他們想要使用JooQ的原因,因此您需要與他們討論應用程序結構。

1

sormula是一個CRUD-ready ORM。您可以將JDBC與sormula混合使用。它不會執行批量插入,但它確實有插入對象集合的insertAll(java.util.Collection)

+0

Sormula看起來很有趣。但是,您應該提到,如果不能使用GPL許可證(例如,可能在此項目中),則它不是免費的 – 2012-01-18 11:57:12

+0

這是GPLv3。我的意圖是作爲開源分發。也許我在我的許可聲明中遺漏了一些東西? http://www.sormula.org/license – 2012-01-18 12:55:01

+0

不,實際上您的網頁上有足夠的信息。我的壞 – 2012-01-18 13:24:25