我想爲我的EJB添加CRUD方法。EJB - 如何在多個持久性單元中使用CRUD代碼
我有很多實體和多個持久性單元。
我想實現一次我的CRUD方法並在不同的持久性單元上調用它們。
我試圖用繼承來實現這一點,但它不工作。
的CRUD類是:
public class FormEBean<T> {
protected EntityManager em;
public EntityManager getEm() {
return em;
}
public void setEm(EntityManager em) {
this.em = em;
}
public String create(T entity) {
try {
em.persist(entity);
em.flush();
return null;
} catch (Exception ex) {
return ex.getLocalizedMessage();
}
}
public void create(List<T> entityList) {
for (T entity : entityList) {
em.persist(entity);
}
}
public void edit(T entity) {
em.merge(entity);
}
public void edit(Set<T> entitySet) {
Iterator<T> it = entitySet.iterator();
while (it.hasNext()) {
T entity = it.next();
em.merge(entity);
}
}
public void remove(T entity) {
em.remove(em.merge(entity));
}
public void remove(T[] listaDaRimuovere) {
for (T entity : listaDaRimuovere) {
em.remove(em.merge(entity));
}
}
public void remove(List<T> listaDaRimuovere) {
for (T entity : listaDaRimuovere) {
em.remove(em.merge(entity));
}
}
}
所以我這樣tryed:
@Stateless
@Remote(MyEBeanRemote.class)
public class MyEBean extends FormEBean<MyEntityClass> implements MyEBeanRemote {
@PersistenceContext(unitName = "siat-ejbPU")
private EntityManager em;
// code here
}
即使我沒有得到任何錯誤,CRUD功能對我的數據庫沒有影響。
相反,如果我直接將它們插入MyEBean,它的行爲如預期。
我不想在FormEBean中使用@PersistenceContext(unitName = "siat-ejbPU")
,因爲EJB可以使用不同的持久性單元。
有沒有辦法解決這個問題?
是否有我可以用來重用我的代碼的模式?
編輯:
這個問題的目的是找到最大化在屬於不同EJB模塊和具有不同的持久性單元的EJB CRUD代碼重用的溶液。
在無狀態會話bean中使用泛型方法似乎是一個很好的解決方案,但只適用於在同一持久性單元中爲EJB重用CRUD代碼。
什麼解決方案可以是獨立的持久性單元(如果存在的話)?
這看起來不錯。它應該允許您編寫一次CRUD方法,併爲每個持久性單元使用一個_stateless會話bean_。這裏有一些想法/建議:1.)你可能想要使_FormEBean_抽象。它看起來不像是要實例化的。 2。)我將在您的CRUD方法中替換_Set _和_List _和_Collection _。 _List_和_Set_實現_Collection_,這允許它們在這裏被視爲相同。 –
jahroy