我正在实现GenericDao。我有2种方法的问题-getAll()和getById(Long id),实体类具有空值。似乎未设置课程。我怎么解决这个问题 ?

 @Repository
 public class GenericDaoImpl<T> implements GenericDao<T> {

private Class<T> clazz;

@Autowired
SessionFactory sessionFactory;

public void setClazz(final Class<T> clazzToSet) {
    this.clazz = clazzToSet;
}

public T getById(final Long id) {
    return (T) this.getCurrentSession().get(this.clazz, id);
}

public List<T> getAll() {

    Criteria criteria = sessionFactory.getCurrentSession().createCriteria(
            this.clazz);
    return criteria.list();

}
   protected final Session getCurrentSession() {
    return this.sessionFactory.getCurrentSession();
  }
 }


人道

    public interface PersonDao extends GenericDao<Person> { }


PersonDaoImpl

 @Repository("PersonDAO")
 public class PersonDaoImpl extends GenericDaoImpl<Person> implements PersonDao {}


服务:

@Service
public class PersonServiceImpl implements PersonService {

   @Autowired
  private PersonDao personDao;


@Transactional
public List<Person> getAll() {

    return personDao.getAll();
}


@Transactional
public Person getById(Long id) {
    return personDao.getById(id);
}
}

最佳答案

您必须设置clazzPersonDao属性。这可以通过使用@PostConstruct注释声明post initialization callback来完成。

 @Repository("PersonDAO")
 public class PersonDaoImpl extends GenericDaoImpl<Person> implements PersonDao {

      @PostConstruct
      public void init(){
         super.setClazz(Person.class);
      }
 }

关于java - GenericDao,Class <T>为空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24229225/

10-10 18:25