NullPointException ao inserir campo auto increment @Id @GeneratedValue[RESOLVIDO]
8 respostas
Diego_Adriano
Bom Galera, estou tendo um problema ao efetuar uma inserção no BD, me retorna uma Exception dizendo que o campo esta “null” porém esse campo é o ID ( @Id@GeneratedValue ) estou usando JSF.
Como é o proprio banco quem ira passar seu valor pq acontece isso ?
Voce criou o get/set desse atributo?
Esse atributo eh do tipo Long?
Ele realmente existe na tabela como auto increment
no @GeneratedValue qual o tipo de GenerationType vc esta usando?
se puder postar o codigo, poderemos avaliar melhor…
abracos
E
edudebom
Já me aconteceu isso quando criei a table com GenerationType auto e depois alterei para identity com a tabela ainda existindo. Tive que apagar a table e deixar o sistema criar novamente.
Se você criou a base na mão pode ser porque não setou sua table como auto incremento.
ailujana
eu tive uma vez esse mesmo problema, tinha esquecido de por auto increment na criação da tabela…
mas ficaria mais fácil de analisar se você colocasse o código
Diego_Adriano
Sim Criei todos os gets/sets
Sim é do tipo Long
Bem, é para ele estar como auto increment pois a anotação força a isso…
Não estou usando nenhum tipo de strategy …
packagemanagedbeans;importjava.util.List;importjavax.faces.bean.ManagedBean;importjavax.faces.bean.ManagedProperty;importjavax.faces.bean.SessionScoped;importjavax.faces.bean.ViewScoped;importjavax.persistence.EntityManager;importrepositorios.PlanoRepository;importmodelo.Plano;@SessionScoped@ManagedBeanpublicclassPlanoBean{@ManagedProperty(value="#{entityMangager}")privateEntityManagerentityManager;privatePlanoPlano=newPlano();privateList<Plano>Planos;/**************************/publicList<Plano>getPlanos(){if(this.Planos==null){System.out.println("CHAMANDO O REPOSITORIO");PlanoRepositoryrepository=newPlanoRepository(this.entityManager);this.Planos=repository.getPlanos();}returnthis.Planos;}/***********************************/publicvoidadiciona(){PlanoRepositoryplanoRepository=newPlanoRepository(this.entityManager);planoRepository.adiciona(this.Plano);this.Plano=newPlano();this.Planos=null;}publicEntityManagergetEntityManager(){returnentityManager;}publicvoidsetEntityManager(EntityManagerentityManager){this.entityManager=entityManager;}publicPlanogetPlano(){returnPlano;}publicvoidsetPlano(Planoplano){Plano=plano;}publicvoidsetPlanos(List<Plano>planos){Planos=planos;}}
JSF
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"xmlns:ui="http://java.sun.com/jsf/facelets"xmlns:h="http://java.sun.com/jsf/html"xmlns:f="http://java.sun.com/jsf/core"xmlns:p="http://primefaces.prime.com.tr/ui"><ui:compositiontemplate="/tamplates/tamplate.xhtml"><ui:definename="conteudo"><h:formstyleClass="formulario"><p:panelheader="Planos"style="margin-left:14%; width:60%;"><h:panelGridcolumns="4"style="text-align: right;"><!--********** NOME DO PLANO ***********--><h:outputTextvalue="Nome:"for="plano-nome"/><h:inputTextid="plano-nome"required="true"value="#{planoBean.plano.nome}"/><h:messagefor="plano-nome"styleClass="mensagem-erro"/><!--********** DESCRIÇÃO DO PLANO ***********--><h:outputTextvalue="Descrição: "for="plano-descricao"/><h:inputTextareaid="plano-descricao"required="true"value="#{planoBean.plano.descricao}"rows="4"cols="16"/><h:messagefor="plano-descricao"styleClass="mensagem-erro"/><!--********** DIAS DO PLANO ***********--><h:outputTextvalue="Dias: "for="plano-dias"/><h:inputTextid="plano-dias"required="true"value="#{planoBean.plano.dias}"/><h:messagefor="plano-dias"styleClass="mensagem-erro"/><!--********** INSERE ***********--><h:commandButtonvalue="Cadastrar"styleClass="botao-formulario"><f:ajaxevent="click"execute="@form"listener="#{planoBean.adiciona}"render="@form"/></h:commandButton></h:panelGrid></p:panel></h:form></ui:define></ui:composition></html>
E
edudebom
Se você não setar strategy é gerada a padrão que é @GeneratedValue(strategy = GenerationType.AUTO). Mas se não mudou durante o uso então não deve ser o problema.
Você tem um erro na escrita aqui: @ManagedProperty(value = “#{entityMangager}”)
denislima
vc disse:
Bem, é para ele estar como auto increment pois a anotação força a isso…
e na base? o campo id na base esta configurado como auto increment??
acredito que tenha q estar tbem…
faz um teste ai…
Diego_Adriano
Verdade Edu, esta realmente com a anotação errada, bem corrigir ela e testar novamente …
Denislima, eu nem acesso o banco manualmente, mas irei verificar isso.
Obrigado.
Diego_Adriano
Resolvi da seguinte forma:
Corrigi a anotação, exclui e criei uma nova base e fiz as anotações que me sugeriram …
Vlw Galera