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

Dúvida no Ex. 4 da Aula 6 - Relacionamentos bidirecionais e o comportamento LAZY

Apesar de ter feito como orientado no video, estou recebendo um erro:

Exception in thread "main" java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: conta is not mapped [select distinct c from conta c ]

Aqui está minha classe Conta:

package br.com.caelum.financas.modelo;

import java.util.List;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;

@Entity
public class Conta {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private String titular;
    private String banco;
    private String agencia;
    private String numero;

    @OneToMany(mappedBy="conta", fetch=FetchType.LAZY) // "conta" do mappedBy é o atributo na classe Movimentacao
    private List<Movimentacao> movimentacoes;

    public List<Movimentacao> getMovimentacoes() {
        return movimentacoes;
    }

    public Integer getId() {
        return id;
    }

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

    public String getTitular() {
        return titular;
    }

    public void setTitular(String titular) {
        this.titular = titular;
    }

    public String getBanco() {
        return banco;
    }

    public void setBanco(String banco) {
        this.banco = banco;
    }

    public String getAgencia() {
        return agencia;
    }

    public void setAgencia(String agencia) {
        this.agencia = agencia;
    }

    public String getNumero() {
        return numero;
    }

    public void setNumero(String numero) {
        this.numero = numero;
    }
}
6 respostas
solução!

Jeronimo, as queries do JPQL são um pouco diferentes da syntax do SQL, tente sempre seguir utilizando exatamente igual ao nome do objeto, nesse caso, Conta com letra maiuscula.

Além de fazer essa correção que o Douglas Galdino pediu, tente também tirar o mappedBy = "conta" e além disso poste também sua classe Movimentacao identada e formatada nos padrões do fórum

para formar o código use " ``` " antes e depois do código, sem as aspas.

Abraços.

Na orientação do Douglas: Entendi, mas eu fiz a query exatamente como está no video...

Já na orientação do Felipe: Estranho...Pelo que entendi que o mappedBy faz o relacionamento bidirecional. Se tirar ele cria a tabela conta_movimentacao e o objetivo é exatamente fazer com que o relacionamento entre conta e movimentacao seja bidireciomal

Obrigado a voces, mas acho estranho...

Srs,

Obrigado! Resolvido o problema. Lendo melhor a mensagem do Douglas, vi que "Conta" tem que estar com letra maiúscula na query.

select distinct c from Conta c join fetch c.movimentacoes

Só pra confirmar o entendimento, na query Conta é o nome do objeto (a classe), não é a tabela conta do banco de dados, certo? O JPQL usa os objetos do OO e não diretamente as tabelas do banco.

Valeu!! Obrigado a todos

Jeronimo, sim exatamente.

Valeu!!! Obrigado.