实施 public void edit(T entity) AbstractFacade java
implement public void edit(T entity) AbstractFacade java
我正在尝试了解外观模式
public abstract class AbstractFacade<T> {
private Class<T> entityClass;
public AbstractFacade(Class<T> entityClass) {
this.entityClass = entityClass;
}
protected abstract EntityManager getEntityManager();
public void create(T entity) {
getEntityManager().persist(entity);
}
public void edit(T entity) {
getEntityManager().merge(entity);
}
public void remove(T entity) {
getEntityManager().remove(getEntityManager().merge(entity));
}
public T find(Object id) {
return getEntityManager().find(entityClass, id);
}
public List<T> findAll() {
javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
cq.select(cq.from(entityClass));
return getEntityManager().createQuery(cq).getResultList();
}
public List<T> findRange(int[] range) {
javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
cq.select(cq.from(entityClass));
javax.persistence.Query q = getEntityManager().createQuery(cq);
q.setMaxResults(range[1] - range[0] + 1);
q.setFirstResult(range[0]);
return q.getResultList();
}
public int count() {
javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
javax.persistence.criteria.Root<T> rt = cq.from(entityClass);
cq.select(getEntityManager().getCriteriaBuilder().count(rt));
javax.persistence.Query q = getEntityManager().createQuery(cq);
return ((Long) q.getSingleResult()).intValue();
}
}
使用 netbeans 向导,但我不明白为什么要将 T 实体发送到此空间;
public void edit(T entity)
并且没有此
的 ID
public void edit(long id)
删除方法相同
public void remove(T entity)
然后做这个
public void remove(long id)
如何在我的 bean 控制器中实现 void Edit?
如果我正确理解你的问题:
Why send(T entity)
returns void
and doesn't require ID?
因为作为参数传递的 entity
已经包含 ID 并将覆盖数据库中具有相同 ID 的实体 table
Same for the remove(T entity)
method
同样如此。如果您没有实体,只有 ID,那么要通过 ID 删除实体,您需要创建新的空实体,分配 ID 并将其传递给 remove()
方法。
how can I implement the void Edit in my bean controller?
在这里,除了 getEntityManager()
方法外,您不需要实现任何东西。种类:
public class MyFacade extends AbstractFacade<MyEntityClass> {
@Resource
EntityManagerFactory emf;
@Override
EntityManager getEntityManager() {
return emf.createEntityManager();
}
}
我正在尝试了解外观模式
public abstract class AbstractFacade<T> {
private Class<T> entityClass;
public AbstractFacade(Class<T> entityClass) {
this.entityClass = entityClass;
}
protected abstract EntityManager getEntityManager();
public void create(T entity) {
getEntityManager().persist(entity);
}
public void edit(T entity) {
getEntityManager().merge(entity);
}
public void remove(T entity) {
getEntityManager().remove(getEntityManager().merge(entity));
}
public T find(Object id) {
return getEntityManager().find(entityClass, id);
}
public List<T> findAll() {
javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
cq.select(cq.from(entityClass));
return getEntityManager().createQuery(cq).getResultList();
}
public List<T> findRange(int[] range) {
javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
cq.select(cq.from(entityClass));
javax.persistence.Query q = getEntityManager().createQuery(cq);
q.setMaxResults(range[1] - range[0] + 1);
q.setFirstResult(range[0]);
return q.getResultList();
}
public int count() {
javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
javax.persistence.criteria.Root<T> rt = cq.from(entityClass);
cq.select(getEntityManager().getCriteriaBuilder().count(rt));
javax.persistence.Query q = getEntityManager().createQuery(cq);
return ((Long) q.getSingleResult()).intValue();
}
}
使用 netbeans 向导,但我不明白为什么要将 T 实体发送到此空间;
public void edit(T entity)
并且没有此
的 IDpublic void edit(long id)
删除方法相同
public void remove(T entity)
然后做这个
public void remove(long id)
如何在我的 bean 控制器中实现 void Edit?
如果我正确理解你的问题:
Why
send(T entity)
returnsvoid
and doesn't require ID?
因为作为参数传递的 entity
已经包含 ID 并将覆盖数据库中具有相同 ID 的实体 table
Same for the
remove(T entity)
method
同样如此。如果您没有实体,只有 ID,那么要通过 ID 删除实体,您需要创建新的空实体,分配 ID 并将其传递给 remove()
方法。
how can I implement the void Edit in my bean controller?
在这里,除了 getEntityManager()
方法外,您不需要实现任何东西。种类:
public class MyFacade extends AbstractFacade<MyEntityClass> {
@Resource
EntityManagerFactory emf;
@Override
EntityManager getEntityManager() {
return emf.createEntityManager();
}
}