Erro com CRITERIA - illegal access to loading collection

olá pessoal, estou usando criteria em meu projeto pra realizar consulta, e em meu projeto utilizo, facade e delegate.

os metodos de inserir, excluir e alterar funcionam certinho, porem o de pesquisa esta dando problema qndo ele tenta acessar o metodo list(); da criteria

segue me metodo de consulta:

[code] public List listarTodos(T obj) throws Exception {

	Transaction transacao = null;
	Session sessao = null;

	try {
		sessao = getSessionFactory().openSession();
		transacao = sessao.beginTransaction();

		Criteria criteria = sessao.createCriteria(obj.getClass());
		List<T> lista = criteria.list();

		transacao.commit();
		sessao.close();

		return lista;

	} catch (Exception e) {
		if (transacao != null) {
			transacao.rollback();
		}
		if (sessao != null) {
			sessao.close();
		}
		throw new Exception("Erro ao listar - Camada AbstractDAO"
				+ e.getMessage());
	}
}[/code]

lança a seguinte exception pra mim:

SEVERE: null java.lang.Exception: Erro ao listar - Camada AbstractDAOillegal access to loading collection at br.com.micromap.abstracts.AbstractDAO.listarTodos(AbstractDAO.java:129) at br.com.micromap.administrador.produto.bo.ProdutoBO.listarTodos(ProdutoBO.java:55) at br.com.micromap.administrador.produto.delegate.ProdutoDelegate.buscarTodos(ProdutoDelegate.java:57) at br.com.micromap.administrador.facade.FacadeAdministrador.buscarTodos(FacadeAdministrador.java:94) at br.com.micromap.testeunitario.ProdutoJUnit.main(ProdutoJUnit.java:49) null

E aqui esta minha VO com as anotações:

[code]@Entity
@Table(name = “produto”)
public class ProdutoVO extends AbstractModelVO {

@Column(name = "imagem", length = 100)
private String imagem;

@Column(name = "setor", length = 60)
private String setor;

@Column(name = "descricao", length = 50)
private String descricao;

@Column(name = "promocao", length = 8)
private Integer promocao;

@Column(name = "garantia", length = 8)
private Integer garantia;

/**
 * Ligação com a tabela de categoria
 */
@ManyToOne(fetch = FetchType.EAGER, optional = false)
@JoinColumn(name = "id_categoria", nullable = false)
private CategoriaVO categoria;

/**
 * Ligação com a tabela marca
 */
@ManyToOne(fetch = FetchType.EAGER, optional = false)
@JoinColumn(name = "id_marca", nullable = false)
private MarcaVO marca;

public ProdutoVO() {
}

public ProdutoVO(Long id, String nome, String imagem, String setor,
		String descricao, Integer promocao, Integer garantia,
		CategoriaVO categoriaVO, MarcaVO marcaVO) {
	super(id, nome);
	setImagem(imagem);
	setSetor(setor);
	setDescricao(descricao);
	setPromocao(promocao);
	setGarantia(garantia);
	setCategoria(categoriaVO);
	setMarca(marcaVO);
}

[/code]

Alguem pode me ajudar com esse problema? Obrigado

Oi amigo você tem que fazer o cast
ve se isso funciona ai

Não amigo, somente (T) não tem como dar certo se fosse seria assim:

List<T> lista = (List<T>)criteria.list();

E que também nao tive resultado, gera a seguitne exception:

SEVERE: null
java.lang.Exception: Erro ao listar - Camada AbstractDAOillegal access to loading collection
	at br.com.micromap.abstracts.AbstractDAO.listarTodos(AbstractDAO.java:129)
	at br.com.micromap.administrador.produto.bo.ProdutoBO.listarTodos(ProdutoBO.java:55)
	at br.com.micromap.administrador.produto.delegate.ProdutoDelegate.buscarTodos(ProdutoDelegate.java:57)
	at br.com.micromap.administrador.facade.FacadeAdministrador.buscarTodos(FacadeAdministrador.java:94)
	at br.com.micromap.testeunitario.ProdutoJUnit.main(ProdutoJUnit.java:49)

null

posso dar uma olhada na class AbstractModelVO

Minha abstract model

[code]@MappedSuperclass
public class AbstractModelVO {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = true, precision = 22, scale = 0)
private Long id;

@Column(name = "nome", nullable = true, length = 200)
private String nome;


public AbstractModelVO() {}

public AbstractModelVO(Long id, String nome){
	setId(id);
	setNome(nome);
}


public Long getId() {
	return id;
}

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

public String getNome() {
	return nome;
}

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

@Override
public String toString() {
	return "AbstractModelVO [id=" + id + ", nome=" + nome + "]";
}

@Override
public int hashCode() {
	final int prime = 31;
	int result = 1;
	result = prime * result + ((id == null) ? 0 : id.hashCode());
	result = prime * result + ((nome == null) ? 0 : nome.hashCode());
	return result;
}

@Override
public boolean equals(Object obj) {
	if (this == obj)
		return true;
	if (obj == null)
		return false;
	if (getClass() != obj.getClass())
		return false;
	AbstractModelVO other = (AbstractModelVO) obj;
	if (id == null) {
		if (other.id != null)
			return false;
	} else if (!id.equals(other.id))
		return false;
	if (nome == null) {
		if (other.nome != null)
			return false;
	} else if (!nome.equals(other.nome))
		return false;
	return true;
}

}[/code]