2016-07-26 48 views
0

我正在設計我的數據庫,並且達到了實體本身訪問數據庫所需的情況。如何在EntityListener中使用EJB?

我讀Why sometimes a reference to an EntityManager inside JPA entities is needed

我很好奇在EntityListener中訪問EJB的可能性。

public class MyEntityListener { 

    @PrePersist 
    private void onPrePersist(final Object object) { 
     // find an EJB 
     // and set those required values 
     // which each resides in a specific table. 
    } 
} 

這是可能的或(或)和首選的?

+1

在Weld + Hibernate(WildFly 8到10)中,在實體監聽器中注入EJB一直對我有CDI'@ Inject'。然而,我確實看到用戶報告這種情況不起作用,不確定爲什麼,因爲他們從不報告所用環境的確切版本。至少我知道這在某些GlassFish版本(使用EclipseLink而不是Hibernate)中已知失敗。 – BalusC

+0

@BalusC你確定你注入的是EJB,而不是恰好在類路徑中的類的實例 –

回答

0

我找到了答案。

看來可能,根據JSR 338: JavaTM Persistence 2.1

3.5.1實體監聽

實體監聽器類在Java EE環境支持依賴注入通過上下文和依賴注入API(CDI)[10]當CDI啓用[43]。使用CDI注入的實體監聽器類還可以定義使用PostConstructPreDestroy註釋進行註釋的生命週期回調方法。這些方法將在注入發生後以及實體監聽器實例分別銷燬之前調用。

持久性提供程序負責使用CDI SPI創建實體監聽器類的實例;在這種情況下進行注射;以調用他們的PostConstructPreDestroy方法(如果有的話);並處置實體監聽器實例。

相關問題