2013-05-21 108 views

回答

3

SessionFactory和Session是hibernate特定的。 EntityManager在引擎下調用休眠會話。如果你需要的是不可用的EntityManager的一些特定的功能,你可以通過調用獲取會話:

Session session = entityManager.unwrap(Session.class); 
+0

關閉會話足夠了嗎?將關閉會話傳播到entityManager?我應該關閉從會話獨立創建的entityManager嗎? – Sergey

15

Session是Hibernate的相關API,EntityManager是JPA API進行了標準化。你可以將EntityManager看作是一個包含Session的適配器類(你甚至可以通過getDelegate()函數從EntityManager對象中獲取Session對象)。

這與周圍的其他Java API不同(例如,JDBC是標準API,每個供應商通過實現標準功能的驅動程序將其產品調整爲API)。

+0

他們之間在功能上有區別還是他們或多或少相同? – Alexey

+0

它們不相同(函數具有不同的名稱,甚至不同的目的,註釋是不同的,等等)。 hibernate(和其他每個JPA供應商)所做的是提供一個適配器對象,通過調用本地hibernate API來創建EntityManager功能。 – EmirCalabuch

相關問題