Struts2+hibernate+spring 已经搭建好了
我现在想写一个抽象的类实现 增删改查的操作。@Transactional
public abstract class DaoSupport implements DAO { @Resource
private SessionFactory sessionFactory;

@Override
public void delete(long id) {
// TODO Auto-generated method stub } @Override
public Object getObject(long id) {
// TODO Auto-generated method stub
return null;
} @Override
public List<Object> getObjects() {
// TODO Auto-generated method stub
return null;
} @Override
public void save(Object obj) { sessionFactory.getCurrentSession().persist(obj); } @Override
public void update(Object obj) {
// TODO Auto-generated method stub }
}
但是在删除多条记录的时候,delete方法做不到我想通过泛型的方式封装这个类,我泛型不太会用,请高手帮我修改一下上面的代码,通过泛型实现 谢谢!

解决方案 »

  1.   

    不用泛型也同样可以的。
    只是类型转换一下而已
    public void deleteMore(List list) {
        for(int i = 0;i<list,size();i++){
           //获取list里面存的对象。Entity为你的实体类。
            Entity entity = (Entity)List.get(i);
            int id = entity.getId();
            //后面执行就可以了
        }
    }
    用泛型不过少了类型转换而已
    public void deleteMore(List<Entity> list) {
        for(int i = 0;i<list,size();i++){
           //获取list里面存的对象。Entity为你的实体类。
            Entity entity = List.get(i);
            int id = entity.getId();
            //后面执行就可以了
        }
    }
      

  2.   

    @Transactional
    public abstract class DaoSupport implements DAO {
    /**
     * 注入实体管理器
     */
    @PersistenceContext protected EntityManager em;

    //AOP
    //EntityManager em = 实体赋值;
    //打开事务

    public <T> void delete(Class<T> entityClass,Object entityId) {
    Object[] entityIds = new Object[]{entityId};
    delete(entityClass, entityIds);
    } public <T> void delete(Class<T> entityClass,Object[] entityIds) {
    for(Object id : entityIds)
    {
    em.remove(em.getReference(entityClass, id));
    }
    } /**
     * 不需要开启事务
     */
    @Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
    public <T> T find(Class<T> entityClass, Object entityId) {
    // TODO Auto-generated method stub
    return em.find(entityClass, entityId);
    } public void save(Object entity) {
    em.persist(entity);
    } public void update(Object entity) {
    em.merge(entity);
    }
    /**
     * 获取实体的名称
     * @param <T>
     * @param entityClass 实体类
     * @return
     */
    protected <T> String getEntityName(Class<T> entityClass)
    {
    String entityName=entityClass.getSimpleName();
    Entity entity=entityClass.getAnnotation(Entity.class);
    if(entity.name()!=null && !"".equals(entity.name()))
    {
    entityName=entity.name();
    }
    return entityName;
    }
    }

    我看了这个代码是 用泛型实现的,但不是hibernate,是用JPA实现的。我想要的就是这个结果。
      

  3.   

    最简单的办法循环删除阿,如果不考虑效率的话。
    整体删除
    public void delete(List<object> list) {
      getHibernateTemplate.deleteAll(list);
    }楼主既然用了泛型List<Obejct>还是换成List<删除的对象名>
      

  4.   


    @SuppressWarnings("unchecked")
    public class SimpleHibernateDao<T, PK extends Serializable> {
    Logger logger = Logger.getLogger(SimpleActionSupport.class.getName());
    @Autowired
    protected SessionFactory sessionFactory; protected Class<T> entityClass; public SimpleHibernateDao(final Class<T> entityClass) {
    this.entityClass = entityClass;
    } public Session getSession() {
    return sessionFactory.getCurrentSession();
    } public SessionFactory getSessionFactory() {
    return sessionFactory;
    } /**
     * 保存新增或修改的对象.
     */
    public void save(final T entity) {
    Assert.notNull(entity, "entity不能为空");
    getSession().saveOrUpdate(entity);
    } /**
     * 删除对象.
     * 
     * @param entity 对象必须是session中的对象或含id属性的transient对象.
     */
    public void delete(final T entity) {
    Assert.notNull(entity, "entity不能为空");
    getSession().delete(entity);
    } /**
     * 按id删除对象.
     */
    public void delete(final PK id) {
    Assert.notNull(id, "id不能为空");
    delete(get(id));
    } /**
     * 按id获取对象.
     */
    public T get(final PK id) {
    Assert.notNull(id, "id不能为空");
    return (T) getSession().load(entityClass, id);
    } /**
     * 获取全部对象.
     */
    public List<T> getAll() {
    return find();
    } /**
     * 获取全部对象,支持排序.
     */
    public List<T> getAll(String orderBy, boolean isAsc) {
    Criteria c = createCriteria();
    if (isAsc) {
    c.addOrder(Order.asc(orderBy));
    } else {
    c.addOrder(Order.desc(orderBy));
    }
    return c.list();
    }.....
    每个DAO只要继续这个类就可以了,例如,现在有一个Users表,对应的类有User.java,UserDao.java
    那么,在UserDao中,需要如果定义public class UserDao extends SimpleHibernateDao<User,Long>{ public UserDao() {
    super(User.class);
    }
    }
      

  5.   

    spring提供的HibernateDaoSupport已经很好地封装了增删改查等功能,楼主为什么不用了?
      

  6.   

    不用hibernate模板你就直接写JDBC呗