我想为我的 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));
}
}
}
所以我尝试了这种方式:
@Stateless
@Remote(MyEBeanRemote.class)
public class MyEBean extends FormEBean<MyEntityClass> implements MyEBeanRemote {
@PersistenceContext(unitName = "siat-ejbPU")
private EntityManager em;
// code here
}
即使我没有任何错误,CRUD 函数对我的数据库也没有影响。
相反,如果我将它们直接插入到 MyEBean 中,它会按预期运行。
我不想@PersistenceContext(unitName = "siat-ejbPU")
在 FormEBean 中使用,因为 EJB 可以使用不同的持久性单元。
有没有办法解决这个问题?
有没有一种模式可以用来重用我的代码?
编辑:
这个问题的目的是找到一种解决方案,在属于不同 EJB 模块并具有不同持久性单元的 EJB 中最大化 CRUD 代码重用。
在无状态会话 bean 中使用泛型方法似乎是一个很好的解决方案,但仅用于在同一持久性单元中为 EJB 重用 CRUD 代码。
什么解决方案可以独立于持久性单元(如果存在)?