2013-01-13 42 views
0

在我加入的新項目中,他們不斷使用術語Hibernate和JPA。所以,我試圖深入研究代碼,並試圖理解整個事情是如何工作的(我對Spring,JPA和Hibernate世界是新的)。我會盡力把這裏的代碼更好的理解: 1)有@Configuration類,他們有以下幾點:Spring + Hibernate + jpa它是如何工作的?

@Resource 
private HibernateJpaVendorAdapter hibernateOracleJpaVendorAdapter; 

LocalContainerEntityManagerFactoryBean entityManager = 
new LocalContainerEntityManagerFactoryBean(); 
entityManager.setJpaVendorAdapter(hibernateOracleJpaVendorAdapter); 
entityManager.setPersistenceUnitName("abc"); 
      . 
      . 

因此,在這種配置類,我們正在返回EntityManagerFactory的。

2)然後有標記@Persistor一個persistor類,其中存儲庫的方法被調用(例如,用於保存操作):

blahblahRepository.save(blahblahEntity, abcdef); 

3)最後有一個存儲庫類,這是帶註釋的@Repository。再說,他們有這樣的一段代碼:

@PersistenceContext(unitName = "same as the name in persistence.xml") 
protected EntityManager entityManager; 

「保存」方法環繞JPA的persist方法:

getEntityManager().persist(entityObject); 

我的問題如下: 1)沒有字關於Hibernate,而不是在hibernateJpaVendorAdapter中。我搜索了整個工作空間,並且只顯示了3個hibernate字樣,全部都在配置文件中。 2)從我擁有的任何知識中,應該使用EntityManagerFactory或EntityManager,但我們都在做?

回答

0

Hibernate是JPA規範的實現之一。由於您的項目選擇Hibernate作爲其JPA實現,因此它使用JPA API委託Hibernate。就像您使用JDBC API時一樣,該API委託給特定的Oracle或PostgreSQL驅動程序。

EntityManagerFactory,如其名稱所示,是EntityManager的工廠。我不明白爲什麼你不會同時使用這兩個。 EntityManager是JPA API的主要接口,用於執行所有數據庫操作(查找,持久化,合併,查詢等)。在要求EntityManager創建EntityManager之前,必須先配置EntityManagerFactory。

+0

你沒有這樣做。春天爲你做,並將它注入你的春豆。 –

+0

請原諒我的無知,但我們不是從EntityManagerFactory創建實體管理器。無論我到目前爲止讀過的博客/文檔如何,它都表示:@PersistenceContext(unit =「abc」)EntityManager em; OR @PersistenceUnit EntityManagerFactory emf; EntityManagerFactory.createEntityManager()創建EntityManager。我的理解錯了嗎?如果沒有,那麼我們爲什麼要這樣做? – user123

相關問題