2011-05-16 84 views
1

我正在使用IBM RAD來開發一些JPA實體,並從那些相應的JPA管理Bean中進行開發。豆經理(由RAD產生)具有下列成員:實例化JPA管理器bean的'正確'方法?

@PersistenceUnit 
private EntityManagerFactory emf; 

我不知道如何correclty實例化(或者獲得一個參考)從一個無狀態EJB(3.0)這個管理器bean,所以我已經向經理bean添加了一個構造函數,我可以將EntityManagerFactory實例傳遞給它。我用得到在EJB到EntityManagerFactory參考`@PersistenceUnit」註釋,像這樣:

@PersistenceUnit 
private EntityManagerFactory _entityManagerFactory; 

這似乎是不必要的,而我相信一定有辦法告訴容器(7.0的Websphere在我的情況),以'bootstrap'這個對我來說,這樣我就可以馬上獲得對JPA管理器bean的引用。是嗎?

更新: 看來我還沒有足夠詳細的闡述。對不起。

  • 涉及到三個對象:JPA實體,JPA實體管理器和無狀態EJB。
  • JPA實體管理器類(不是EJB)由RAD創建,並且具有便利的方法(命名查詢)。它也定義了成員@PersistenceUnit private EntityManagerFactory emf。我知道我可以直接使用EntityManager,但我想使用MyEntityManager來提供便利的方法。
  • 我可以通過使用上述註釋(也像Bozho建議的)獲得對無狀態EJB中的EntityManager或EntityManagerFactory的引用
  • 我想在無狀態EJB中獲得對JPA實體管理器的引用。如果我'新'它(新的MyEntityManager()),電磁場字段爲空。解決方法是在EJB中聲明@PersistenceUnit字段,然後將其傳遞給JPA實體管理器並使用它。
  • 想想吧,也許我可以將JPA實體管理器聲明爲EJB並完成它(儘管這似乎不再需要)。我認爲沿着PersistenceContext.getJpaManager(MyEntityManager.class)的方法,我可能會失蹤。

回答

1
@PersistenceContext 
private EntityManager em; 

看來你要在其他豆類注入(它需要一個本地接口至少)定製的bean:

@EJB 
private MyEntityManager em; 
+0

這讓我'EntityManager',不'MyEntityManager '這取決於'EntityManager'並且實際上已經聲明成員字段就像你描述的那樣。換句話說,我想知道如何獲得一個引用MyEntityManager(它只是一個普通的bean,用'@ JPAManager'註釋),因爲如果我只是'新建',@PersistenceContext註解不起作用參考爲空)。 FWIW,我知道我可以直接使用EntityManager,但MyEntityManager(由RAD生成)有一些易於使用的方法和命名查詢,我想重用它。 – miha 2011-05-16 16:09:37

+0

我沒有在您的問題中看到任何對MyEntityManager的引用。檢查更新。 – Bozho 2011-05-16 16:10:36