爲什麼每個應用程序只使用一個SessionFactory對象?每個應用程序使用單一會話工廠對象的優點是什麼?爲什麼每個應用程序只使用一個SessionFactory對象?
回答
會話工廠對象將使用單例設計模式來實現。 SessionFactory的實例是線程安全的並且通常在整個應用程序中共享。由於這些對象包含連接信息,hibernate配置信息和映射文件以及位置路徑,因此這些對象的權重很重。所以創建實例數量將使我們的應用程序重量級。但會話對象不是線程安全的。簡而言之,SessionFactory對象是每個應用程序一個,Session對象每個客戶端一個。
因此,它將是每個DataSource一個SessionFactory。您的應用程序可能有多個DataSource,因此您可能在該實例中擁有多個SessionFactory。但是您不希望在應用程序中多次創建SessionFactory。
優勢: 顯然它的應用程序提高性能:)
更新 - 摘自Hibernate Doc
一個SessionFactory的內部狀態是不可改變的。一旦創建了這個內部狀態 被設置。該內部狀態包括關於對象/關係映射的元數據的所有 。
不,你錯了DarkHorse SessionFactory沒有使用單例設計模式實現。 –
@DarkHorse SessionFactory不是Singleton,它用作單例,它是不可變的http://docs.jboss.org/hibernate/orm/3.5/javadocs/org/hibernate/SessionFactory.html – anshulkatta
由於SessionFactory
的創建是一個極其昂貴的過程,其中涉及解析Hibernate配置/映射屬性和創建數據庫連接池.Creating數據庫連接池,需要建立數據庫連接(即創建Connection對象),其具有的開銷因查找數據庫服務器所需的時間,建立通信通道和交換信息以進行身份驗證。
因此,如果您爲每個請求創建SessionFactory
,這意味着您沒有使用數據庫連接池來處理您的請求。您必須爲每個請求設置一個新的連接,而不是僅僅獲取已打開的來自數據庫連接池的連接。
有關於每個應用程序的一個SessionFactory對象的一些關鍵點: -
1.單數據存儲: - 它是對整個應用程序單獨的數據存儲。儘管可以有多個SessionFactory,但每個SessionFactory都會有一個與之關聯的不同數據庫。
2.線程安全: - SessionFactory是線程安全的,因此許多線程都可以訪問SessionFactory。
3.不可變: - 創建SessionFactory的對象後,您無法更改或設置Session Facotyr的值。其內部狀態是在創建時設置的。
4.Singleton: - SessionFactory是在應用程序啓動時構建的,它遵循單例設計模式。
我希望這會回答你的問題..
有關如何創建SessionFactory的請有參考網址詳情:http://techpost360.blogspot.in/2015/07/what-is-hibernate-sessionfactory.html
雅,它非常簡單明白這個SessionFactory遵循singleton設計模式。所以你可以在孔應用中只創建一個對象。 SessionFactory也是線程安全的,因此一次只能有一個線程執行其代碼。 sessionFactory的實例被加重,因爲它包含連接,hibernate配置,映射文件,位置路徑,所以如果你創建了sessionFactory的實例數,那麼你的代碼變得非常沉重。由於這個原因,我們只爲一個應用程序使用一個sessionFactory實例。爲了提高應用程序的性能,我們在一個應用程序中只使用一個sessionFactory實例。
- 1. 每個應用程序應該只有一個EventSource對象嗎?
- 2. 爲什麼每個應用程序都有一個JVM?
- 3. 爲什麼每個應用程序只有一個model.py,而不是整個項目中只有一個model.py?
- 4. 如何存儲在上下文中SessionFactory對象,並使用同一個對象的整個應用程序
- 5. 什麼時候應該使用每個線程同步對象?
- 6. 每個應用程序是否只有一個共享首選項對象?
- 7. 爲什麼我的線程程序只使用一個CPU?
- 8. 爲什麼mysql每個表只使用一個索引?
- 9. 爲什麼我不能只爲整個android應用程序提供一個MqttAndroidClient?
- 10. 爲什麼Facebook有每個應用程序的用戶ID?
- 11. Symfony應用程序:對於每個HTTP GET,有2個HTTP HEAD:爲什麼?
- 12. 爲什麼我的對象被另一個線程使用?
- 13. 爲什麼我只能用一個對象填充我的NSArray?
- 14. iPhone應用程序:每秒創建一個對象
- 15. Android:應用程序是否只有一個上下文對象
- 16. 這個Meteor示例應用程序爲什麼只顯示一個空白頁?
- 17. 我的整個Rails應用程序只能從一個文件爲什麼
- 18. 將對象從一個應用程序傳遞到另一個應用程序
- 19. 將對象從一個應用程序傳輸到另一個應用程序
- 20. 整個應用程序的一個對象或每次調用一個對象+處理
- 21. 每個應用程序只有一個BroadcastReceiver?
- 22. 多個SessionFactories,多個DataSource和Hibernate TransactionManager只能使用一個Sessionfactory
- 23. 每當我打開一個nswindow - mac應用程序初始化一個對象
- 24. 每個對象和每個引用都有什麼不同?
- 25. 爲什麼我們使用接口引用一個子對象?
- 26. 如何爲多個對象使用一個處理程序?
- 27. 爲什麼MySQL只爲每個查詢使用0.5%的內存?
- 28. 我應該爲每個應用程序創建一個factories.py嗎?
- 29. MVC應用程序中的控制器應該爲每個域對象或每組相關操作一個?
- 30. 爲什麼用一個空對象擴展一個函數?
可以參考這裏獲取更多詳細信息http://stackoverflow.com/a/4544053/366964 –