首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Hibernate上实现GenericDAO类

如何在Hibernate上实现GenericDAO类
EN

Stack Overflow用户
提问于 2016-04-13 15:48:04
回答 1查看 746关注 0票数 2

我希望UserDao类扩展GenericDAO,在那里我将拥有所有的CRUD方法。我读过IBM的文章:http://www.ibm.com/developerworks/java/library/j-genericdao/index.html,但我无法实现它。谁能给我展示一下基于我的自定义UserDao类的例子。

代码语言:javascript
复制
@Transactional(value="myTransactionManager")
public class UserDao {

    @Qualifier("mySessionFactory")
    public SessionFactoryImpl sessionFactory;

    public void setSessionFactory(SessionFactoryImpl sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    public List<UserEntity> getAll() {
        Query query = sessionFactory.getCurrentSession().createQuery(
                "from UserEntity ");
        List<UserEntity> userList = query.list();
        return userList;
    }

    public void updaet(UserEntity userEntity) {
        sessionFactory.getCurrentSession().update(userEntity);
    }

    public void delete(UserEntity userEntity) {
        sessionFactory.getCurrentSession().delete(userEntity);
    }

    public void save(UserEntity userEntity) {
        sessionFactory.getCurrentSession().save(userEntity);
    }

}

我试着像这样写类

代码语言:javascript
复制
public class GenericDao{

    @Qualifier("mySessionFactory")
    public SessionFactoryImpl sessionFactory;

    public void setSessionFactory(SessionFactoryImpl sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    public <T> List<T> getAll(Class<T> t) {
        Query query = sessionFactory.getCurrentSession().createQuery(
                "from " + t.getName());
        List<T> list = query.list();
        return list;
    }

    public <T> void save(T t) {
        sessionFactory.getCurrentSession().save(t);
    }

    public <T> void update(T t) {
        sessionFactory.getCurrentSession().update(t);
    }

    public <T> void delete(T t) {
        sessionFactory.getCurrentSession().delete(t);
    }
}

但是当我尝试像这样用UserDao拉取数据时:

代码语言:javascript
复制
public List<UserEntity> getAll() {
    List<UserEntity> list = UserDao.findAll();
}

Eclipse IDE for line List<UserEntity> list = UserDao.findAll();给出错误:对于类型UserDao,方法findAll()定义不足。

EN

回答 1

Stack Overflow用户

发布于 2016-04-13 17:15:57

这是我的实现:

GenericDao:

代码语言:javascript
复制
@Repository
public class GenericDao<T extends DbObject> {

    @Autowired
    private SessionFactory sessionFactory;

    private Class<T> getParameterizedClass() {
        return (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
    }

    public T findById(final Serializable id) {
        return (T) getCurrentSession().get(getParameterizedClass(), id.toString());
    }

    public void persist(final T object) {
        getCurrentSession().persist(object);
    }

    public void saveOrUpdate(final T object) {
        getCurrentSession().saveOrUpdate(object);
    }

    public void delete(final T object) {
        getCurrentSession().delete(object);
    }

    public T merge(final T object) {
        return (T) getCurrentSession().merge(object);
    }

}

UserDao:

代码语言:javascript
复制
public class UserDao extends GenericDao<User> {

}

实体:

代码语言:javascript
复制
@Entity
@Table(name = "...")    
public class User extends DbObject {
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36591846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档