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)的方法,我可能會失蹤。
這讓我'EntityManager',不'MyEntityManager '這取決於'EntityManager'並且實際上已經聲明成員字段就像你描述的那樣。換句話說,我想知道如何獲得一個引用MyEntityManager(它只是一個普通的bean,用'@ JPAManager'註釋),因爲如果我只是'新建',@PersistenceContext註解不起作用參考爲空)。 FWIW,我知道我可以直接使用EntityManager,但MyEntityManager(由RAD生成)有一些易於使用的方法和命名查詢,我想重用它。 – miha 2011-05-16 16:09:37
我沒有在您的問題中看到任何對MyEntityManager的引用。檢查更新。 – Bozho 2011-05-16 16:10:36