4
respostas

Erro de nullPointerException

Erro ao subir o relacionamento Entre Movimentação e Conta

package br.com.alura.jpa.modelo;

import java.time.LocalDate;

import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToOne; import javax.persistence.OneToMany;

import com.ibm.icu.math.BigDecimal;

@Entity public class Movimentacao {

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

@Enumerated(EnumType.STRING)
private tipoMovimentacao tipoMovimentacao;
private BigDecimal saldo;
private String descricao;
private LocalDate data;

@ManyToOne
private Conta conta;


public void setConta(Conta conta) {
    this.conta = conta;
}

public Conta getConta() {
    return conta;
}

public long getId() {
    return id;
}

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

public tipoMovimentacao getTipoMovimentacao() {
    return tipoMovimentacao;
}

public void setTipoMovimentacao(tipoMovimentacao tipoMovimentacao) {
    this.tipoMovimentacao = tipoMovimentacao;
}

public BigDecimal getSaldo() {
    return saldo;
}

public void setSaldo(BigDecimal saldo) {
    this.saldo = saldo;
}

public String getDescricao() {
    return descricao;
}

public void setDescricao(String descricao) {
    this.descricao = descricao;
}

public LocalDate getData() {
    return data;
}

Classe Conta....

package br.com.alura.jpa.modelo;

import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id;

import org.stringtemplate.v4.compiler.CodeGenerator.includeExpr_return;

import com.ibm.icu.math.BigDecimal;

@Entity public class Conta {

private String TITULAR;
private Integer NUMERO;
private Integer AGENCIA;
private BigDecimal SALDO;

public BigDecimal getSALDO() {
    return SALDO;
}

public void setSALDO(BigDecimal sALDO) {
    SALDO = sALDO;
}

@Id
@GeneratedValue
private long id;

public String getTitular() {
    return TITULAR;
}

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

public Integer getNumero() {
    return NUMERO;
}

public void setNumero(Integer numero) {
    this.NUMERO = numero;
}

public Integer getAgencia() {
    return AGENCIA;
}

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

public long getId() {
    return id;
}

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

}

Erro Assumido....

Exception in thread "main" java.lang.NullPointerException at org.hibernate.boot.model.process.internal.InferredBasicValueResolver.from(InferredBasicValueResolver.java:140) at org.hibernate.mapping.BasicValue.buildResolution(BasicValue.java:384) at org.hibernate.mapping.BasicValue.resolve(BasicValue.java:247) at org.hibernate.mapping.BasicValue.resolve(BasicValue.java:238) at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.lambda$processValueResolvers$1(InFlightMetadataCollectorImpl.java:1682) at java.base/java.util.ArrayList.removeIf(ArrayList.java:1711) at java.base/java.util.ArrayList.removeIf(ArrayList.java:1689) at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processValueResolvers(InFlightMetadataCollectorImpl.java:1681) at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1667) at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:281) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1217) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1248) at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:56) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) at br.com.alura.jpa.modelo.testeMovimentacao.main(testeMovimentacao.java:29)

public void setData(LocalDate data) {
    this.data = data;
}

}

4 respostas

Olá Marcio, tudo bem com você?

Você poderia mandar também o seu arquivo testeMovimentacao para ver como você está fazendo o teste?

Eu testei aqui com os seus códigos e está criando as tabelas corretamente, entretanto faltou você declarar como será feito a geração de id na classe conta: (strategy = GenerationType.IDENTITY)

@Id
@GeneratedValue
private long id;

Abraços!

public class testeMovimentacao {

public static void main(String[] args) {

    Conta conta = new Conta();
    conta.setAgencia(3333);
    conta.setNumero(2323);
    conta.setSALDO(800.0);
    conta.setTitular("Alberto");

    Movimentacao movimentacao = new Movimentacao();
    movimentacao.setData(LocalDate.now());
    movimentacao.setTipoMovimentacao(tipoMovimentacao.ENTRADA);
    movimentacao.setSaldo(500.0);
    movimentacao.setDescricao("Pizzaria");

    movimentacao.setConta(conta);

    EntityManagerFactory emf = Persistence.createEntityManagerFactory("alura");
    EntityManager em = emf.createEntityManager();

    em.getTransaction().begin();
           em.persist(conta);
    em.persist(movimentacao);
    em.getTransaction().commit();
    em.close();

}

}

Márcio, você está conseguindo executar seu código?

Pois existe algumas inconsistências que era para o eclipse ou a IDE que você está utilizando não permitir, por exemplo:

    conta.setSALDO(800.0);

Você definiu o saldo como sendo um BigDecimal:

public void setSALDO(BigDecimal sALDO) {
    SALDO = sALDO;
}

A mesma coisa acontece com o saldo da Movimentação:

    movimentacao.setSaldo(500.0);

Precisamos fazer da seguinte maneira:

conta.setSALDO( new BigDecimal(800));
movimentacao.setSaldo( new BigDecimal(500));

Por conta disso não deve estar havendo a persistência da Conta, lançando um erro.

Pode fazer essa mudanças e mandar se aconteceu algum outro erro?

Qualquer coisa estou a disposição!

Abraços e Bons Estudos :)

Obrigado Geovani, consegui contornar o erro... Valeu..