2011-02-02 78 views
2

我目前正在爲我的應用創建一些測試。 我遇到了需要涉及JPA的@PrePersist功能的問題。 不幸的是,這些攔截器沒有被解僱,而是持續,更新(等),我發現使用Hibernate的Session API這個功能不起作用。這裏出現我的問題。JPA/Hibernate問題(@PrePersist,Session API澄清)

在應用程序中使用Session API的主要證明是什麼,並且是否有機會直接檢索EntityManager以觸發觸發器?

我非常感謝在這個題目任何提示和建議,

回答

3

什麼是主要證明的Session API是應用程序

簡單化使用,EntityManager的API是一個「空殼」圍繞最初的Session API。但我想你想要另一個答案:-)我唯一能給的其他答案是檢查源代碼。或者,如果您沒有源代碼,則需要更改日誌記錄配置。將它設置爲Session類的「trace」,然後你就可以看到它被調用的時間。

有沒有機會直接檢索EntityManager,以便觸發觸發器?

當然,這取決於您使用的應用程序服務器或框架。如果你有一個「真正的」應用服務器,你可以從中檢索EM。如果您正在使用獨立應用程序,則可以使用EntityManagerFactory創建一個EntityManager。但在這之前,我會檢查的例子在Hibernate的測試套件:

https://github.com/hibernate/hibernate-core/blob/master/hibernate-entitymanager/src/test/java/org/hibernate/ejb/test/LastUpdateListener.java

另外,如果你使用JPA API,你仍然可以在Hibernate的事件監聽器是

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#objectstate-events

+0

似乎在我工作的應用程序中沒有使用任何會話(沒有使用對象會話,直接注入EntityManager),而且據我所知,該應用程序遵循JPA,並避免任何框架具體的解決方案,當然如果EJB不需要在後臺使用會話對象,它不會自動處理它 – redbull 2011-02-02 09:30:02