Olá,
gostaria de não precisar passar a classe class pelo construtor na hora de chamar
a classe DAO tem como internamente achar a classe e passar sem ter que passar via
chamada ???
se alguém puder me ajuda agradeceria…
abs
--hoje como está
@SuppressWarnings("unchecked")
public DAO(Session session, Class persistentClass) {
this.session = session;
this.persistentClass = persistentClass;
}
--como queria que ficasse só passar a session via parametro
-- e ter um jeito internamente de passar o nome da classe do DAO que estou usando
-- por exemplo (UsuarioDAO que seria o objeto Usuario)
@SuppressWarnings("unchecked")
public DAO(Session session) {
this.session = session;
this.persistentClass = persistentClass;
}
public class DAO<T> {
private static Logger logger = Logger.getLogger(DAO.class);
@SuppressWarnings("unchecked")
private Class persistentClass;
protected Session session;
@SuppressWarnings("unchecked")
public DAO(Session session, Class persistentClass) {
this.session = session;
this.persistentClass = persistentClass;
}
protected Session getSession(){
return session;
}
@SuppressWarnings("unchecked")
public T load(Long id) throws DaoException{
logger.info("lendo " + persistentClass + " com id " + id);
try{
return (T) session.load(persistentClass, id);
}catch(Exception e) {
throw new DaoException("Erro="+e);
}
}
public void save(T t) throws DaoException{
logger.info("salvando " + t);
try{
session.save(t);
}catch(Exception e) {
throw new DaoException("Erro="+e);
}
}
public void delete(T t) {
logger.info("Deletando " + t);
try{
session.delete(t);
}catch(Exception e) {
throw new DaoException("Erro="+e);
}
}
@SuppressWarnings("unchecked")
public List<T> list() {
logger.info("Listando todos");
try{
return session.createCriteria(persistentClass).list();
}catch(Exception e) {
throw new DaoException("Erro="+e);
}
}
public void merge(T t) {
logger.info("Salvando ou atualizando " + t);
try{
session.merge(t);
}catch(Exception e) {
throw new DaoException("Erro="+e);
}
}
}