Pessoal segue o modelo do meu DAO atual:
DAOFactory Interface
public interface DAOFactory <T> {
public T getGenericDAO();
}
SysAguasDAOFactory(Meu factory)
public class SysAguasDAOFactory implements DAOFactory{
public SysAguasDAOFactory() {
}
public GenericDAO getGenericDAO() {
return new GenericDAO();
}
}
Meu SessionController que fornece os recursos para DAO abrir transação e cometer as mesmas…
public class SessionController {
protected static final EntityManagerFactory emf = Persistence.createEntityManagerFactory("SysAguasPU");
protected EntityManager em = null;
protected EntityTransaction transaction;
private EntityTransaction transaction2;
public SessionController() {
}
public void beginTransaction(){
if(em == null){
em = emf.createEntityManager();
em.getTransaction().begin();
}else if(em.getTransaction().isActive()){
System.out.println("Já possuímos uma transação em aberto, finalize antes de iniciar outra");
}else{
em.getTransaction().begin();
}
}
public void commitTransaction(){
if(em != null){
if(em.getTransaction().isActive()){
try {
em.getTransaction().commit();
} finally {
em.close();
em=null;
}
}else{
System.out.println("Não há transações ativas para commit");
}
}
}
}
Interface GenericRepository
public interface GenericRepository {
/**
* @param instance
*/
public void persist(Object instance);
/**
* @param instance
*/
public void delete(Class classeObjeto,Integer codigo);
/**
* @param id
*/
/**
* @param instance
*/
public void update(Object instance);
/**
* @param id
* @return
*/
public <T> T findById(Class<T> classeObjeto, Integer id);
/**
* @return
*/
public <T>List findAll(Class<T> classeObjeto);
/**
* @param begin
* @param end
* @return
*/
// public List<T> findAll(Integer begin, Integer end);
/**
* @param example
* @return
*/
// public List<T> findByExample(T example);
/**
* @param example
* @param begin
* @param end
* @return
*/
// public List<T> findByExample(T example, Integer begin, Integer end);
}
[b]Minha implementação do DAO
public class GenericDAO extends SessionController implements GenericRepository {
public GenericDAO() {
super();
}
//public void persist(Object instance) throws EntityExistsException,IllegalStateException,TransactionRequiredException {
public void persist(Object instance) throws DAOException {
em.persist(instance);
}
//public void update(Object instance) throws IllegalStateException,IllegalArgumentException,TransactionRequiredException {
public void update(Object instance) throws DAOException {
em.merge(instance);
}
//public void delete(Class classeObjeto,Integer codigo) throws IllegalStateException,IllegalArgumentException,TransactionRequiredException {
public void delete(Class classeObjeto,Integer codigo) throws DAOException {
em.remove(findById(classeObjeto,codigo));
}
//public <T> T findById(Class<T> classeObjeto, Integer id) throws IllegalStateException,IllegalArgumentException {
public <T> T findById(Class<T> classeObjeto, Integer id) throws DAOException {
String sql = new StringBuilder("SELECT t FROM ").append(classeObjeto.getSimpleName())
.append(" t WHERE " ).append("t.codigo = :codigo").toString();
Query e = em.createQuery(sql);
e.setParameter("codigo",id);
return (T) e.getSingleResult();
}
//public <T> List findAll(Class<T> classeObjeto) throws IllegalStateException,IllegalArgumentException {
public <T> List findAll(Class<T> classeObjeto) throws DAOException {
String sql = new StringBuilder("SELECT t FROM ").append(classeObjeto.getSimpleName()).append(" t").toString();
Query e = em.createQuery(sql);
List<T> results = (List<T>) e.getResultList();
return results;
}
Bom pessoal, infelizmente vocês tem falado algumas coisas de desenvolvimento em ambientes EE que eu ainda não estou familiarizado, estou estudando bastante java e realmente quero me tornar um bom desenvolvedor por isso vim aqui trocar informações sobre meu modelo…
Mas por enquanto não quero utilizar nada pronto (VIDE SPRING) pois quero aprender na mão o que acontece por trás dos panos nesses frameworks que facilitam nossas vidas…
Olhem ai meu DAO agora que irá funcionar para toda entidade… usarei ele para todas e caso seja necessário um DAO especifico eu herdo dele crio um repositorio pra entidade e implemento ele…
O que acharam? Dicas? Críticas? posso melhorar aonde dentro das espectativas minhas usando JAVA SE puro com netbeans hehehehe!
Vlw!