2014-02-10 77 views
1

我正在管理使用PostgreSQL數據庫的Spring Web應用程序的開發。Hibernate查詢v數據庫函數

我正在做db工作並提供腳本(即authenticate_user)供正在使用Hibernate的Java開發人員使用。我對Java和Hibernate的接觸有限。

我瞭解hibernate的基本概念,但肯定不是它提供的全套功能。我想要了解和控制數據層,但想要最好的解決方案,那麼最好的解決方案就是一切。

我最初的想法是存儲所有作爲函數或過程編寫的查詢/插入/更新腳本,並允許Java開發人員簡單地調用它們並使用結果/結果集,而不是構建hibernate表引用和查詢Java類/ XML文件。我們的Java開發人員說他寧願使用hibernate來處理所有事情,並且正在轉換我的函數/過程。

到目前爲止,我們的sql語句非常簡單。當他們達到複雜程度(或更高)時會發生什麼,如下面的帖子所示?

How to construct advanced Hibernate Query with OR and summarize functions

如果一個函數/程序被寫入數據庫,並正在被休眠調用,可以在Java開發人員只稱他們(即調用myFunction的(PARAM)或致電MYPROC(PARAM)),並使用結果集的方式與他在hibernate中構建查詢的方式完全相同?例如;我有一個從GROUP和HAVING子句返回1000條記錄的多個表中選擇。如果我將該選擇放入一個過程中,hibernate開發人員是否可以簡單地調用該過程,並以與僅在hibernate中創建select相同的方式使用這些記錄?

非常感謝, 大衛

回答

1

Hibernate是框架用於映射對象定向域模型到傳統的關係數據庫。在使用hibernate時,執行插入,更新,刪除等操作變得更加容易。 開發人員必須執行像foo.save(),foo.update()這樣的簡單操作,而hibernate會將其內部轉換爲sql查詢並在數據庫上執行。它使任務變得簡單。最重要的是,如果您碰巧改變使用的數據庫,您的代碼不會改變一點(配置除外)。

所以,最好的辦法是:

  • 使用Hibernate而不是調用程序,所有的時間。
  • 如果您想使用某些複雜任務的過程,可以使用hibernate調用過程。休眠時有多種方法可以通過它調用過程。所以,這裏沒有問題。

選擇查詢: 無需使用過程來調用select。 Hibernate有非常簡單的選擇方式,它返回對象列表!不需要將結果映射到對象。 例如:

Query query = session.createQuery("from table where columnName = 'value' "); 
List list = query.list(); 

返回對象列表。不需要將resultSet顯式映射到對象。

在這裏寫下ORM的所有優點是不可能的,請閱讀ORM工具提供的優勢,然後決定您的策略。

0

Hibernate是一個ORM,它可以讓你有一些優勢。例如使用hql,你不需要在不同的數據庫(postegres,mysql等)上使用不同查詢的原生sql。所以你不需要在不同的數據庫上改變你的查詢和其他東西,比如模型等等。

相關問題