1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Erro: Column 'data_pagamento' cannot be null - Dúvida do Livro Algaworks (Jee7, com jsf, primeface e cdi)

Olá pessoal,

Estou seguinto o tutorial do livro Jee7, com jsf, primeface e cdi da AlgaWorks, e já tentei de tudo, inclusive copiar e colar o código do livro para ter certeza que não é erro de digitação, mas o erro persiste. Estou empacado há alguns dias. Se puderem me ajudar eu agradeço. Valeu.

(OB.: Os importes eu fiz por minha conta, no livro não estão no código)

Ao tentar rodar a seguinte classe:

package com.algaworks.financeiro.controller;

import java.math.BigDecimal;
import java.util.Calendar;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;

import com.algaworks.financeiro.model.Lancamento;
import com.algaworks.financeiro.model.Pessoa;
import com.algaworks.financeiro.model.TipoLancamento;
import com.algaworks.financeiro.util.JpaUtil;

public class CriaLancamentos {

    public static void main(String[] args) {

        EntityManager manager = JpaUtil.getEntityManager();

        EntityTransaction trx = manager.getTransaction();

        trx.begin();

        Calendar dataVencimento1 = Calendar.getInstance();

        dataVencimento1.set(2013, 10, 1, 0, 0, 0);

        Calendar dataVencimento2 = Calendar.getInstance();

        dataVencimento2.set(2013, 12, 10, 0, 0, 0);

        Pessoa cliente = new Pessoa();    

        cliente.setNome("WWW Indústria de Alimentos");

        Pessoa fornecedor = new Pessoa();

        fornecedor.setNome("SoftBRAX Treinamentos");

        Lancamento lancamento1 = new Lancamento();

        lancamento1.setDescricao("Venda de licença de software");

        lancamento1.setPessoa(cliente);

        lancamento1.setDataVencimento(dataVencimento1.getTime());

        lancamento1.setDataPagamento(dataVencimento1.getTime());

        lancamento1.setValor(new BigDecimal(103_000));

        lancamento1.setTipo(TipoLancamento.RECEITA);
        Lancamento lancamento2 = new Lancamento();

        lancamento2.setDescricao("Venda de suporte anual");

        lancamento2.setPessoa(cliente);

        lancamento2.setDataVencimento(dataVencimento1.getTime());

        lancamento2.setDataPagamento(dataVencimento1.getTime());

        lancamento2.setValor(new BigDecimal(15_000));

        lancamento2.setTipo(TipoLancamento.RECEITA);

        Lancamento lancamento3 = new Lancamento();

        lancamento3.setDescricao("Treinamento da equipe");

        lancamento3.setPessoa(fornecedor);

        lancamento3.setDataVencimento(dataVencimento2.getTime());

        lancamento3.setValor(new BigDecimal(68_000));

        lancamento3.setTipo(TipoLancamento.DESPESA);

        manager.persist(cliente);

        manager.persist(fornecedor);

        manager.persist(lancamento1);

        manager.persist(lancamento2);

        manager.persist(lancamento3);

        trx.commit();

        manager.close();
    }
}

Gera o seguinte erro:

Hibernate: 
    insert 
    into
        pessoa
        (nome) 
    values
        (?)
Hibernate: 
    insert 
    into
        pessoa
        (nome) 
    values
        (?)
Hibernate: 
    insert 
    into
        lancamento
        (data_pagamento, data_vencimento, descricao, pessoa_id, tipo, valor) 
    values
        (?, ?, ?, ?, ?, ?)
Hibernate: 
    insert 
    into
        lancamento
        (data_pagamento, data_vencimento, descricao, pessoa_id, tipo, valor) 
    values
        (?, ?, ?, ?, ?, ?)
Hibernate: 
    insert 
    into
        lancamento
        (data_pagamento, data_vencimento, descricao, pessoa_id, tipo, valor) 
    values
        (?, ?, ?, ?, ?, ?)
out 08, 2015 10:18:40 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 1048, SQLState: 23000
out 08, 2015 10:18:40 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Column 'data_pagamento' cannot be null
out 08, 2015 10:18:40 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper$StandardWarningHandler logWarning
WARN: SQL Warning Code: 1048, SQLState: 23000
out 08, 2015 10:18:40 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper$StandardWarningHandler logWarning
WARN: Column 'data_pagamento' cannot be null
Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not execute statement
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1763)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1683)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1187)
    at com.algaworks.financeiro.controller.CriaLancamentos.main(CriaLancamentos.java:87)
Caused by: org.hibernate.exception.ConstraintViolationException: could not execute statement
    at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:72)
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:211)
    at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:96)
    at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:58)
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3032)
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3558)
    at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:98)
    at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:492)
    at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:197)
    at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:181)
    at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:216)
    at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:324)
    at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:288)
    at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:194)
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:125)
    at org.hibernate.jpa.event.internal.core.JpaPersistEventListener.saveWithGeneratedId(JpaPersistEventListener.java:84)
    at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:206)
    at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:149)
    at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:75)
    at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:811)
    at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:784)
    at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:789)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1181)
    ... 1 more
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'data_pagamento' cannot be null
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:377)
    at com.mysql.jdbc.Util.getInstance(Util.java:360)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:971)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3887)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3823)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2435)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2582)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2530)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1907)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2141)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2077)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2062)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:208)
    ... 22 more

A classe Lancamento é a seguinte:

package com.algaworks.financeiro.model;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity

@Table(name = "lancamento")

public class Lancamento implements Serializable {

    private static final long serialVersionUID = 1L;

    private Long id;

    private Pessoa pessoa;

    private String descricao;

    private BigDecimal valor;

    private TipoLancamento tipo;

    private Date dataVencimento;

    private Date dataPagamento;

    @Id

    @GeneratedValue

    public Long getId() {

        return id;

    }

    public void setId(Long id) {

        this.id = id;

    }

    @ManyToOne(optional = false)

    @JoinColumn(name = "pessoa_id")

    public Pessoa getPessoa() {

        return pessoa;

    }

    public void setPessoa(Pessoa pessoa) {

        this.pessoa = pessoa;

    }

    @Column(length = 80, nullable = false)

    public String getDescricao() {

        return descricao;

    }

    public void setDescricao(String descricao) {

        this.descricao = descricao;
    }

    @Column(precision = 10, scale = 2, nullable = false)

    public BigDecimal getValor() {

        return valor;

    }

    public void setValor(BigDecimal valor) {

        this.valor = valor;

    }

    @Enumerated(EnumType.STRING)

    @Column(nullable = false)

    public TipoLancamento getTipo() {

        return tipo;

    }

    public void setTipo(TipoLancamento tipo) {

        this.tipo = tipo;

    }

    @Temporal(TemporalType.DATE)

    @Column(name = "data_vencimento", nullable = false)

    public Date getDataVencimento() {

        return dataVencimento;

    }

    public void setDataVencimento(Date dataVencimento) {

        this.dataVencimento = dataVencimento;

    }

    @Temporal(TemporalType.DATE)

    @Column(name = "data_pagamento", nullable = true)

    public Date getDataPagamento() {

        return dataPagamento;

    }

    public void setDataPagamento(Date dataPagamento) {

        this.dataPagamento = dataPagamento;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((id == null) ? 0 : id.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;
        Lancamento other = (Lancamento) obj;
        if (id == null) {
            if (other.id != null)
                return false;
        } else if (!id.equals(other.id))
            return false;
        return true;
    }

}

A classe pessoa:

package com.algaworks.financeiro.model;

import java.io.Serializable;

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

@Entity
@Table(name = "pessoa")
public class Pessoa implements Serializable{

    public Pessoa(){

    }

    private static final long serialVersionUID = -6483585805372541206L;

    private Long id;
    private String nome;

    @Id
    @GeneratedValue
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }

    @Column(length = 60, nullable = false)
    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((id == null) ? 0 : id.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;
        Pessoa other = (Pessoa) obj;
        if (id == null) {
            if (other.id != null)
                return false;
        } else if (!id.equals(other.id))
            return false;
        return true;
    }


}

E tipo lancamento:

package com.algaworks.financeiro.model;

import java.io.Serializable;

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

@Entity
@Table(name = "pessoa")
public class Pessoa implements Serializable{

    public Pessoa(){

    }

    private static final long serialVersionUID = -6483585805372541206L;

    private Long id;
    private String nome;

    @Id
    @GeneratedValue
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }

    @Column(length = 60, nullable = false)
    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((id == null) ? 0 : id.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;
        Pessoa other = (Pessoa) obj;
        if (id == null) {
            if (other.id != null)
                return false;
        } else if (!id.equals(other.id))
            return false;
        return true;
    }


}

Informações adicionais: Estou fazendo o tutorial no Eclipse (linux) O servidor é o Apache 8.

A classe persistência é a abaixo:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="FinanceiroPU">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>com.paulo.fabricaweb3.entidade.Usuario</class>
    <properties>
        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/financeiro"/>
        <property name="javax.persistence.jdbc.user" value="root" />
        <property name="javax.persistence.jdbc.password" value="" />
          <property name="hibernate.cache.provider_class" value="org.hibernate.dialect.MySQL5Dialect"/>
          <property name="hibernate.show_sql" value="true"/>
          <property name="hibernate.format_sql" value="true"/>
          <property name="hibernate.hbm2ddl.auto" value="update"/>
    </properties>
  </persistence-unit>
</persistence>

E a classe JpaUtil

package com.algaworks.financeiro.util;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class JpaUtil {
    private static EntityManagerFactory factory;

    static {
        factory = Persistence.createEntityManagerFactory("FinanceiroPU");
    }
    public static EntityManager getEntityManager(){
        return factory.createEntityManager();
    }

}

Será que foi algum import que fiz errado???????

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java-ee jsf jpa ou faça a sua própria pergunta.