Ajuda no CRITERIA, Buscando dados errados = erro no datatable - JSF

Galera, minha listagem de funcionarios num datatable esta errada porque esta buscando os itens errados numa consulta usando criteria.
Aqui vai meu codigo…

DataTable:

Metodo getTodosOsfuncionarios(), que é chamado pelo getList() quando no campo de busca nao tem nada digitado…

public String getTodosOsFuncionarios(){ FuncionarioDAO dao = new FuncionarioDAO(); list = dao.list(); HibernateUtil.closeSession(); return null;

e finalmente o DAO (o metodo list é do generico, entao vou posta-lo no lugar do funcionarioDAO):

    @SuppressWarnings("unchecked")  
    public List<T> list() {  
        try {  
            System.out.println(clazz.getName());  
            Criteria busca = HibernateUtil.getSession().createCriteria(this.clazz);  
            System.out.println(busca.list().size());  
            return busca.list();    
        } catch (RuntimeException re) {             
            throw re;  
        }  
    }  

Na minha tabela Funcionario, tem registrado apenas 2 funcionarios, soh que esta retornando 18…
mais dexa eu explicar como funciona aplicacao… Estou fazendo um quadro de faltas dos funcionarios de uma empresa
Então cada funcionario tem uma lista de PONTOS…

tenho 2 funcionarios na tabela funcionarios … mais esses funcionarios tem varios pontos.
Conforme eu vou adicionando pontos em um funcionario… no datatable pe inserido linhas (o que nao deveria acontecer, ja que na tabela funcionarios continua os 2 funcionarios)…
Então ele esta somando os funcionarios que estao na tabela Funcionario, com os Funcionarios da tabela PONTO.

Alguem me ajuda ?

aqui esta o HQL gerado:

Nome da classe:   entidades.Funcionario
Hibernate: 
    select
        this_.id as id0_1_,
        this_.divida as divida0_1_,
        this_.email as email0_1_,
        this_.nome as nome0_1_,
        this_.qt_pontos as qt5_0_1_,
        this_.telefone_celular as telefone6_0_1_,
        this_.telefone_residencial as telefone7_0_1_,
        this_.horario_ultimo_ponto as horario8_0_1_,
        pontos2_.id_funcionario as id4_3_,
        pontos2_.id as id3_,
        pontos2_.id as id1_0_,
        pontos2_.id_funcionario as id4_1_0_,
        pontos2_.horario_marcacao as horario2_1_0_,
        pontos2_.motivo_marcacao as motivo3_1_0_ 
    from
        Funcionario this_ 
    left outer join
        Ponto pontos2_ 
            on this_.id=pontos2_.id_funcionario

SIZE: 16

ele ta trazendo 16 por causa do outer join
alguem sabe como tratar isso ?
quero que ele pegue apenas os funcionarios da tabela funcionario, ou seja, 2

é… realmente nao consigo entender
ninguem ?

uma pergunta.

Criteria busca = HibernateUtil.getSession().createCriteria(this.clazz);

thiz.clazz ???

é isso mesmo??

att. Jonas

isso mesmo,
é porque esse é o generico

Quando eu instancio um FuncionarioDAO, este chama o construtor super, passando como parametro a classe Funcionario
que no caso eh jogado nessa variavel clazz do tipo Class.

ninguem ?

Não estou em casa agora… mais posso dizer resumidamente como esta, ai mais tarde coloco tudo certo

A classe Funcionario possui uma lista de Pontos num relacionamento OneToMany
mappedby=funcionario
fetch=Eager

A classe Ponto possui um atributo funcionario num relacionamento ManyToOne
o fetch tambem é eager

Quando eu adiciono um ponto, ele coloca o ponto certo, mais ta adicionando o funcionario repetido no datatable
Sendo que na tabela continuam os 2 funcionarios

pronto, aqui vai:

@OneToMany(mappedBy="funcionario", fetch=FetchType.EAGER) @Cascade(CascadeType.ALL) private List<Ponto> pontos = new ArrayList<Ponto>();

@ManyToOne(fetch=FetchType.EAGER) @JoinColumn(name="id_funcionario", nullable=false) @Fetch(FetchMode.JOIN) @Cascade(CascadeType.SAVE_UPDATE) private Funcionario funcionario;

Estou com esse problema ate hj… alguem tem ideia ?

Troquei o Fetch.EAGER por fetch.LAZY na tabela Funcionario (Lista), dai fica correto…
mais eu perco toda a lista de pontos do funcionario, tem alguma maneira disso nao acontecer?

Se importa de colocar o código da sua entidade funcionario?

Até aqui o código parece estar correto.