[Meio resolvido] Só um método do EJB retorna lista, os outros não!

Olá pessoal,

tô com o seguinte problema, tenho alguns métodos no EJB, após fazer o cadastro, vou listar os dados, e só lista os dados do funcionário ([entity.Funcionario[CPF=1111 Nome=zé], entity.Funcionario[CPF=4444 Nome=maria]])

Nas outras listagens não são exibidas as listagens e aparece uma pá de erro, sendo que já verifiquei linha a linha o erro na console e coloquei pra debugar e nada. Abaixo segue um trecho do erro, que leva até o método buscarTodosClientes que está no EJB. Um tanto quanto estranho já que a lógica do buscarTodosFuncionarios é a mesma e funciona.

at sessionbean.__ServicosLocadoraRemote_Remote_DynamicStub.buscarTodosClientes(sessionbean/__ServicosLocadoraRemote_Remote_DynamicStub.java)
	... 2 more

Antes que alguém pergunte: o jar do EJB está atualizado na aplicação cliente? Sim.
após modificar o EJB, fez o deploy. Sim (E ainda parei e iniciei o Glassfish pra garantir)
está sendo feita a persistência de todas as entidades no banco? Sim.

Então pra ver se algúem ajuda, vou deixar trechos de código abaixo. Relembrando que buscarTodosFuncionarios(); retorna a lista e os outros métodos não.

package sessionbean;

@Remote
public interface ServicosLocadoraRemote {
	
	public List<Funcionario> buscarTodosFuncionarios();
	
	public List<Cliente> buscarTodosClientes();
	
}
@Stateless(mappedName="locadoraRemota")
public class ServicosLocadoraBean implements ServicosLocadoraRemote {

	@PersistenceContext(unitName="LocadoraUP")
	private EntityManager manager;

        @SuppressWarnings("unchecked")
	@Override
	public List<Funcionario> buscarTodosFuncionarios() {

		Query query = manager.createQuery("SELECT f FROM Funcionario f");

		List<Funcionario> funcionarios = query.getResultList();

		return funcionarios;
	}

        @SuppressWarnings("unchecked")
	@Override
	public List<Cliente> buscarTodosClientes() {

		Query query = manager.createQuery("SELECT c FROM Cliente c");

		List<Cliente> clientes = query.getResultList();

		return clientes;
	}
}
package entity;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;

@SuppressWarnings("serial")
@Entity
public class Funcionario implements Serializable {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;

	private String cpf, nome, senha;

	@OneToOne
	private Locadora locadora;

	public Funcionario() {}

	public Funcionario(String cpf, String nome, String senha) {
		this.cpf = cpf;
		this.nome = nome;
		this.senha = senha;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getCpf() {
		return cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public Locadora getLocadora() {
		return locadora;
	}

	public void setLocadora(Locadora locadora) {
		this.locadora = locadora;
	}

	@Override
	public int hashCode() {
		int hash = 0;
		hash += (id != null ? id.hashCode() : 0);
		return hash;
	}

	@Override
	public boolean equals(Object object) {
		// TODO: Warning - this method won't work in the case the id fields are not set
		if (!(object instanceof Funcionario)) {
			return false;
		}
		Funcionario other = (Funcionario) object;
		if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
			return false;
		}
		return true;
	}

	/*@Override
	public String toString() {
		return "entity.Funcionario[id=" + id + "]";
	}*/

	@Override
	public String toString() {
		return "entity.Funcionario[CPF=" + cpf + " Nome=" +  nome + "]";
	}

}
package entity;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;

@SuppressWarnings("serial")
@Entity
public class Cliente implements Serializable {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;

	private String cpf, nome;

	@OneToOne
	private Locacao locacao;
	
	@OneToOne
	private Locadora locadora;

	public Cliente() {}

	public Cliente(String cpf, String nome) {
		this.cpf = cpf;
		this.nome = nome;
	}

	public Long getId() {
		return id;
	}
	
	public void setId(Long id) {
		this.id = id;
	}

	public String getCpf() {
		return cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public Locacao getLocacao() {
		return locacao;
	}

	public void setLocacao(Locacao locacao) {
		this.locacao = locacao;
	}

	public Locadora getLocadora() {
		return locadora;
	}

	public void setLocadora(Locadora locadora) {
		this.locadora = locadora;
	}

	@Override
	public int hashCode() {
		int hash = 0;
		hash += (id != null ? id.hashCode() : 0);
		return hash;
	}

	@Override
	public boolean equals(Object object) {
		// TODO: Warning - this method won't work in the case the id fields are not set
		if (!(object instanceof Cliente)) {
			return false;
		}
		Cliente other = (Cliente) object;
		if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
			return false;
		}
		return true;
	}

	/*@Override
	public String toString() {
		return "entity.Cliente[id=" + id + "]";
	}*/
	
	@Override
	public String toString() {
		return "entity.Cliente[CPF=" + cpf + " Nome=" +  nome + "]";
	}

}

E o teste no main


public class Main {

	public static void main(String[] args) {

		try{

			InitialContext ctx = new InitialContext();

			ServicosLocadoraRemote dao = (ServicosLocadoraRemote) ctx.lookup("locadoraRemota");

			/*dao.cadastrarLocadora("Locadora A");
			dao.cadastrarFuncionario("Locadora A", "1111", "zé", "123");
			dao.cadastrarFuncionario("Locadora A", "4444", "maria", "123");
			dao.cadastrarCarro("Locadora A", "AAA-1111", "Chevrolet", "Vectra");
			dao.cadastrarCarro("Locadora A", "BBB-2222", "Chevrolet", "Meriva");
			dao.cadastrarCarro("Locadora A", "CCC-3333", "FIAT", "Uno");
			dao.cadastrarCliente("Locadora A", "2222", "maria");
			dao.cadastrarCliente("Locadora A", "3333", "josé");
			dao.realizarLocacao("Locadora A", "2222", "BBB-2222");
			dao.realizarLocacao("Locadora A", "3333", "AAA-1111");*/

			//System.out.println(dao.buscarTodasLocadoras()); 
			//System.out.println(dao.buscarTodosFuncionarios());
			//System.out.println(dao.buscarTodosCarros());
			System.out.println(dao.buscarTodosClientes());
			//System.out.println(dao.buscarTodasLocacoes());
			
			//dao.devolver("3333");

		}catch(NamingException ne) {
			ne.printStackTrace();
		}

	}

}

A dúvida permanece.

Só consegui resolver mudando o provider para Toplink. Com Hibernate não funciona. Deve ter alguma configuração específica pra fazer.