Classe padrão para o CRUD

Achei que essa classe resolveria meu problema, mas será que resolveria mesmo? Gostaria de estar no Form Escola e gravar,deletar,atualizar e listar somente escola. Se tiver no Form professor, idem para professior. Abaixo minha Interface e minha classe DaoImplementaTudo.

[code]package br.com.prime.dao;

import java.util.List;
import br.com.prime.modelo.*;

public interface DAO<T> {
public void Inserir(T t);
public void Deletar(T t);
public void Atualizar(T t);
public List<T> lista();
}
[/code]

[code]import br.com.prime.dao.;
import br.com.prime.modelo.
;
import br.com.prime.util.*;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class EscolaDao implements DAO{

@Override
public void Deletar(Object obj) {
    Session session = HibernateUtil.getSessionFactory().openSession();
    Transaction t = session.beginTransaction();
    session.delete(obj);
    t.commit();       
}
@Override
public void Atualizar(Object obj) {
    Session session = HibernateUtil.getSessionFactory().openSession();
    Transaction t = session.beginTransaction();
    session.update(obj);
    t.commit();       
}
@Override
public void Inserir(Object obj) {
    Session session = HibernateUtil.getSessionFactory().openSession();
    Transaction t = session.beginTransaction();
    session.save(obj);
    t.commit();
   
}
@Override
public List lista() {
    Session session = HibernateUtil.getSessionFactory().openSession();
    Transaction t = session.beginTransaction();
    List lista = session.createQuery("from Escola").list();
    t.commit();
    return lista;
}

}[/code]

procure pelo padrao activerecord, ele resolve estes problemas com polimorfismo.

na tua classe de implementação faz algo assim

public class EscolaDao implements DAO<Escola>{

    @Override
    public void Inserir(Escola t) {
        Seu Método
    }

    @Override
    public void Deletar(Escola t) {
        Seu Método
    }

    @Override
    public void Atualizar(Escola t) {
        Seu Método
    }

    @Override
    public List<Escola> lista() {
        Seu Método
    }
    
}

Ficou assim agora minhas classes.

[code]import br.com.prime.modelo.Escola;
import br.com.prime.dao.DAO;
import br.com.prime.dao.EscolaDao;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

@ManagedBean
@SessionScoped
public class EscolaControle {

private Escola escola;
private DataModel listaEscola;

public DataModel getEscolaAtiva(){
    List&lt;Escola&gt; lista = new EscolaDao().list();
    listaEscola = new ListDataModel(lista);
    return listaEscola;
}

public Escola getEscola() {
    return escola;
}

public void setEscola(Escola escola) {
    this.escola = escola;
}

public String preparInserirEscola(){
    escola = new Escola();
    return "gerenciarEscola";
}
public String DeletarEscola(){
    Escola escolatemp = (Escola)(listaEscola.getRowData());
    DAO dao = new EscolaDao();
    dao.Deletar(escolatemp);
    return "index";
}

public String prepararAlterarEscola(){
    escola = (Escola)(listaEscola.getRowData());
    return "gerenciarEscola";
}

public String adicionarEscola(){
    DAO dao = new EscolaDao();
    dao.Inserir(escola);
    return "index";       
}
public String alterarEscola(){
    DAO dao = new EscolaDao();
    dao.Atualizar(escola);
    return "index";
}

}[/code]

[code]
import br.com.prime.dao.;
import br.com.prime.modelo.
;
import br.com.prime.util.*;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class EscolaDao implements DAO<Escola>{

@Override
public List&lt;Escola&gt; list() {
    Session session = HibernateUtil.getSessionFactory().openSession();
    Transaction t = session.beginTransaction();
    List lista = session.createQuery("from Escola").list();
    t.commit();
    return lista;
}
@Override
public void Inserir(Escola escola) {
    Session session = HibernateUtil.getSessionFactory().openSession();
    Transaction t = session.beginTransaction();
    session.save(escola);
    t.commit();       
}
@Override
public void Deletar(Escola escola) {
    Session session = HibernateUtil.getSessionFactory().openSession();
    Transaction t = session.beginTransaction();
    session.delete(escola);
    t.commit();
}
@Override
public void Atualizar(Escola escola) {
    Session session = HibernateUtil.getSessionFactory().openSession();
    Transaction t = session.beginTransaction();
    session.update(escola);
    t.commit();           
}

}

import java.util.List;
import br.com.prime.modelo.*;

public interface DAO&lt;T&gt; {
    public void Inserir(T t);
    public void Deletar(T t);
    public void Atualizar(T t);
    public List&lt;T&gt; list();
}

Agora só preciso testar isso. Terei que criar um xhtml com os campos e testar. Ainda to meio cru nisso. Esse xhtml não será o definitivo, pois receberei um e colocarei essa lógica nele. Mas eu ainda não fiz as configuraçoes do Hibernate, para conexão com o banco. Já tenho os drivers no meu ClassPath. Eu uso:
PostgreSql, Helios,Java 6, Hibernate/JPA,JSF 2.0 e Primefaces 2.2.1. Precisava acrescentar aí um DataGrid da Prime para carregar as escolas e outros. Isso é só meu começo com a ferramenta.