Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Minha table Cliente não contem a coluna conta_id

Classe Cliente

@Entity
public class Cliente {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer Id;
    private String nome;
    private String profissao;
    private String endereco;

    //uma conta para um cliente
    @OneToOne(mappedBy="cliente")
    @JoinColumn(unique=true)
    private Conta conta;    
    public Conta getConta() {
        return conta;    }
    public void setConta(Conta conta) {
        this.conta = conta;    }
    public String getEndereco() {
        return endereco; }
    public void setEndereco(String endereco) {
        this.endereco = endereco;}
    public Integer getId() {
        return Id;}
    public void setId(Integer id) {
        Id = id;
    }
    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    public String getProfissao() {
        return profissao;
    }
    public void setProfissao(String profissao) {
        this.profissao = profissao;
    }    
}

Classe Conta

@Entity
public class Conta {

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

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

    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 getNumero() {
        return numero;
    }
    public void setNumero(String numero) {
        this.numero = numero;
    }
    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 Cliente getCliente() {
        return cliente;
    }
    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }
}
 ----- TesteContaCliente-------
public class TesteContaCliente {
    public static void main(String[] args) {    
    Cliente cliente = new Cliente();
        cliente.setNome("Leonardo");
        cliente.setEndereco("Rua Fulano, 123");
        cliente.setProfissao("Professor");
        Conta conta = new Conta();
        conta.setId(2);
        cliente.setConta(conta);
        EntityManager em = new JPAutil().getEntityManager();
        em.getTransaction().begin();
        em.persist(cliente);
        em.getTransaction().commit();  
    }
}

No meu banco de dados ele nao ta fazendo a lrelação das tabelas veja :

mysql> select * from cliente;
+----+-----------------+----------+-----------+
| Id | endereco        | nome     | profissao |
+----+-----------------+----------+-----------+
|  1 | Rua Fulano, 123 | Leonardo | Professor |
|  2 | Rua Fulano, 123 | Leonardo | Professor |
|  3 | Rua Fulano, 123 | Leonardo | Professor |
+----+-----------------+----------+-----------+
3 rows in set (0.00 sec)

mysql> select * from conta;
+----+---------+-------------------------------+---------+---------------------+------------+
| id | agencia | banco                         | numero  | titular             | cliente_Id |
+----+---------+-------------------------------+---------+---------------------+------------+
|  1 | 6543    | 001 - BANCO DO BRASIL         | 16987-8 | Maria dos Santos    |       NULL |
|  2 | 1745    | 237 - BANCO BRADESCO          | 86759-1 | Paulo Roberto Souza |       NULL |
|  3 | 4606    | 341 - BANCO ITAU UNIBANCO     | 46346-3 | Antonio Duraes      |       NULL |
|  4 | 9876    | 033 - BANCO SANTANDER         | 12345-6 | Leandra Marques     |       NULL |
|  5 | 1234    | 104 - CAIXA ECONOMICA FEDERAL | 98654-3 | Alexandre Duarte    |       NULL |
+----+---------+-------------------------------+---------+---------------------+------------+
5 rows in set (0.00 sec)

mysql> show tables;
+------------------------+
| Tables_in_financas     |
+------------------------+
| categoria              |
| cliente                |
| conta                  |
| hibernate_sequence     |
| movimentacao           |
| movimentacao_categoria |
+------------------------+

Queria saber oque ocorre .. Ja refiz todo codigo nao acho o erro Desde já agradeço ...

4 respostas

Olá,

Na classe Cliente, tente alterar a GeneratedValue para IDENTITY

@Entity
public class Cliente {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer Id;

Se não me engano também, esse mapped não deveria estar na classe conta(mesmo não sendo necessário)?


    at br.com.financas.util.PopulaConta.main(PopulaConta.java:11)
Caused by: org.hibernate.AnnotationException: Unknown mappedBy in: br.com.financas.modelo.Conta.cliente, referenced property unknown: br.com.financas.modelo.Cliente.conta
    at org.hibernate.cfg.OneToOneSecondPass.doSecondPass(OneToOneSecondPass.java:169)
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1684)
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1652)
    at org.hibernate.boot.model.process.spi.MetadataBuilding

Entao colocando isso que voce disse da esse erro no console

solução

Consegui resolver. Na classe cliente eu tirei o mapeamento e na anotação coloquei que nao poderia ser nulo, porque como podem ver na minha tabela do banco de dados ele estava vindo nulo e nao pegava o valor conta.id. (OBS: nao sei se tinha a ver com o mapeamento mesmo )

 @OneToOne
    @JoinColumn(unique=true,nullable=false)
    private Conta conta;

Após isso rodei primeiro populaConta, depois PopulaMovimentacoes e por ultimo TestaContaCliente. E finalmente criou as tabelas corretamente