2014-03-30 29 views
0

Hibernate提供多少種訪問數據庫的方式?Hibernate提供多少種訪問數據庫的方式?

例如,我想CRUD一個目的是數據庫,我發現:

  1. 從會話工廠使用會話: session.save(對象); ...

  2. 使用Hibernate查詢語言。

  3. 使用Hibernate標準查詢。

  4. 使用原生SQL。

但我不知道我該用什麼。請列出您的練習,以便按優先級降低順序訪問數據庫,以及您爲什麼這樣做。

謝謝。

+0

編號1)直接由2)和3)要求。 Number 4)完全擊敗了Hibernate的對象。在2)和3)之間?蘋果和桔子。 –

+0

謝謝鮑里斯。 – June6th

回答

0

如果您有一個ID並想要關聯的實體,請使用Session.get()。它是高效的,並且使用第一級緩存來避免重複執行查詢。

如果您需要通過其他條件獲取實體(例如,所有具有給定名字的用戶),則使用JPQL查詢。它們編寫簡單,可讀性強,並且比標準查詢具有更少的限制。

如果您需要採取各種可選標準(如複雜的搜索表單),則標準API是該工作的工具。但它不能完成JPQL查詢所做的一切。還有其他API可用,並且您可以相對輕鬆地編寫一個API,以根據需要生成動態JPQL查詢。

如果您有一個非常複雜的查詢,無法使用JPQL來表示,請使用SQL。

要將事情寫入數據庫,通常不應使用查詢,除非在特定情況下必須以相同方式修改許多實體。相反,讓實體修改並修改它們。 Hibernate會自動保存它們的新狀態。

+0

對不起,JPQL? – June6th

+0

我的意思是HQL。 HQL實際上是Java持久性查詢語言JPQL的超集。 Hibernate是標準JPA(Java持久性API) –

+0

的實現非常感謝JB Nizet,你說「HQL(JPQL)比標準查詢具有更少的限制」。標準限制是什麼? – June6th

相關問題