Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Hibernate上实现GenericDAO类_Java_Hibernate_Generics - Fatal编程技术网

Java 如何在Hibernate上实现GenericDAO类

Java 如何在Hibernate上实现GenericDAO类,java,hibernate,generics,Java,Hibernate,Generics,我希望UserDao类扩展GenericDAO,在这里我将拥有所有CRUD方法。我读过IBM的文章,但我无法实现它。有人能给我展示一下基于我的自定义UserDao类的示例吗 @Transactional(value="myTransactionManager") public class UserDao { @Qualifier("mySessionFactory") public SessionFactoryImpl sessionFactory; public v

我希望UserDao类扩展GenericDAO,在这里我将拥有所有CRUD方法。我读过IBM的文章,但我无法实现它。有人能给我展示一下基于我的自定义UserDao类的示例吗

@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);
    }

}
@Transactional(value=“myTransactionManager”)
公共类UserDao{
@限定符(“mySessionFactory”)
公共会话工厂MPL会话工厂;
public void setSessionFactory(SessionFactoryImpl sessionFactory){
this.sessionFactory=sessionFactory;
}
公共列表getAll(){
Query Query=sessionFactory.getCurrentSession().createQuery(
“来自用户实体”);
List userList=query.List();
返回用户列表;
}
public void updaet(UserEntity UserEntity){
sessionFactory.getCurrentSession().update(userEntity);
}
公共作废删除(UserEntity UserEntity){
sessionFactory.getCurrentSession().delete(userEntity);
}
公共作废保存(用户实体用户实体){
sessionFactory.getCurrentSession().save(userEntity);
}
}
我试着写这样的课

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);
    }
}
公共类GenericDao{
@限定符(“mySessionFactory”)
公共会话工厂MPL会话工厂;
public void setSessionFactory(SessionFactoryImpl sessionFactory){
this.sessionFactory=sessionFactory;
}
公共列表getAll(t类){
Query Query=sessionFactory.getCurrentSession().createQuery(
“from”+t.getName());
List=query.List();
退货清单;
}
公共无效保存(T){
sessionFactory.getCurrentSession().save(t);
}
公共无效更新(T){
getCurrentSession().update(t);
}
公共作废删除(T){
getCurrentSession().delete(t);
}
}
但当我尝试使用UserDao提取数据时,如下所示:

public List<UserEntity> getAll() {
    List<UserEntity> list = UserDao.findAll();
}
public List getAll(){
List=UserDao.findAll();
}

List=UserDao.findAll()的Eclipse IDE给出错误:方法
findAll()
对于类型UserDao定义不足。

这是我的实现:

通用DAO:

@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);
    }

}

您需要将类型传递给GenericDao,
GenericDao
并对其进行扩展,显然…
UserDao
不会扩展
GenericDao
您不会将泛型添加到类定义中
GenericDao
UserDao不扩展描述中的GenericDao。但是当我扩展它时,它给出了如上所述的错误。我是按照您的要求实现的:这个方法的作用:私有类getParameterizedClass(){return(Class)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];}
public class UserDao extends GenericDao<User> {

}
@Entity
@Table(name = "...")    
public class User extends DbObject {
}