Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Erro na Aula 5, alguem pode ajudar a informar o por que do erro??

     EntityManager em = new ConnectionFactory().getConnection();
     Contas contas = new Contas();

     em.getTransaction().begin();
     contas.getCon_id();
      Categorias categoria1 = new Categorias("Viagem Trabalho");
      Categorias categoria2 = new Categorias("Viagem Laser");

      Movimentacao movimentacao1 = new Movimentacao();
      movimentacao1.setContas(contas);
      movimentacao1.setData(Calendar.getInstance());//sem paramentros é de hoje
      movimentacao1.setDescricao("Viagem a Londres");
      movimentacao1.setTipo(TipoMovimentacao.SAIDA);
      movimentacao1.setValor(new BigDecimal("1000"));
      movimentacao1.setCategoria(Arrays.asList(categoria1, categoria2));//lista de categoria



      Movimentacao movimentacao2 = new Movimentacao();
      movimentacao2.setContas(contas);
      movimentacao2.setData(Calendar.getInstance());//sem paramentros é de hoje
      movimentacao2.setDescricao("Viagem a Londres");
      movimentacao2.setTipo(TipoMovimentacao.SAIDA);
      movimentacao2.setValor(new BigDecimal("500"));
      movimentacao2.setCategoria(Arrays.asList(categoria1, categoria2));//lista de categoria

      em.persist(categoria2);
      em.persist(categoria1);
      em.persist(movimentacao2);
      em.persist(movimentacao1);     


     em.getTransaction().commit();
     em.close();
    "at pt.com.alura.teste.Teste06MovimentaçõesComCategorias.main(Teste06MovimentaçõesComCategorias.java:19)
Caused by: org.hibernate.AnnotationException: Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements: pt.com.alura.Clientes.contas
    at org.hibernate.cfg.annotations.CollectionBinder.getCollectionBinder(CollectionBinder.java:324)
    at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1939)
    at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:975)
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:802)"
4 respostas

Olá Antonio tudo bem com você??

Conforme o erro mostrado, não pode ter a anotação @ManyToMany num objeto do tipo Evento ou está com a anotação errada e deveria ser @ManyToOne ou ainda o objeto errado e deveria ser List. O mesmo se aplica para Função. Segue um trecho tirado da Documentação Técnica sobre Mapeamento:

7.2 Como mapear coleções
Usando anotações, você pode mapear Coleções, Listas, Mapas e Conjuntos de entidades associadas usando @OneToMany e @ManyToMany. Para coleções de um tipo básico ou incorporável, use @ElementCollection. No caso mais simples, um mapeamento de coleção se parece com isso:

Exemplo 7.2 Mapeamento de coleção usando @OneToMany e @JoinColumn

@Entidade
produto de classe pública {

    private String serialNumber;
    private Set <Part> parts = new HashSet <Part> ();

    @Eu iria
    public String getSerialNumber () {return serialNumber; }
    void setSerialNumber (String sn) {serialNumber = sn; }

    @Um para muitos
    @JoinColumn (nome = "PART_ID")
    conjunto público <Part> getParts () {retorna peças; }
    void setParts (Set parts) {this.parts = parts; }
}


@Entidade
classe pública Part {
   ...
}

O produto descreve um relacionamento unidirecional com a peça usando a coluna de junção PART_ID. Neste cenário unidirecional para muitos, você também pode usar uma tabela de junção, como visto no Exemplo 7.3, “Mapeamento de coleção usando @OneToMany e @JoinTable”.

Espero ter te ajudado no entendimento do erro e qualquer coisa só voltar aqui! Bons estudos!

Ola Victor Obrigado pelo Suporte, mas como vc pode ver isto ja existe! Eu não acho o erro. Foi o que fiz ou Não??


       //Classe Movimentacao
    @ManyToOne// Muitas Movimentações para 1 conta
    private Contas contas;    

    @ManyToMany// muitas movimentações e muitas categorias
    private List<Categorias> categoria; // por ser ManytoMany temos q 
        receber em uma lista
solução!

Oi Antonio, tudo bem?

A exception nos diz que você está tentando mapear uma não coleção como @OneToMany, @ManyToMany ou @CollectionOfElements, portanto, a causa é provavelmente que o mapeamento do relacionamento de Contas está errado, poderia postar sua classe Conta.java aqui, por favor?

O mapeamento da sua classe Conta.java deve ser igual abaixo:

@OneToOne
@JoinColumn(unique=true)
private Cliente cliente;

Otávio obrigado, o problema era isto mesmo, obrigado

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software