我正在实现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);
}
}
最佳答案
您必须设置clazz
的PersonDao
属性。这可以通过使用@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/