Erro com CRITERIA - illegal access to loading collection

4 respostas
douglascst90

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:

public List<T> 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());
		}
	}

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:
@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);
	}

Alguem pode me ajudar com esse problema? Obrigado

4 Respostas

andrews360

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

douglascst90

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
andrews360

posso dar uma olhada na class AbstractModelVO

douglascst90
Minha abstract model
@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;
	}
	
}
Criado 8 de março de 2013
Ultima resposta 11 de mar. de 2013
Respostas 4
Participantes 2