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

Erro not-null property references a null

Bom Dia !

Estou montando uma aplicação que existe um relacionamento many to many , estou inserindo os dados nas duas tabelas normalmente porem quando os dados vão persistir na tabela da "junção" esta dando um erro segue abaixo :

Classe Carga :

@Entity
@Table (name = "carga", schema = "saecsystem")
public class Carga {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id_carga")
    private int id;

    @Column(name = "num_carga" , nullable=false, insertable=true, updatable=true)
    private int numCarga;

    @Column(name = "loja" , nullable=false, insertable=true, updatable=true)
    private int loja;

    @Column(name = "tip_carga", nullable=false, insertable=true, updatable=true)
    private String tipoCarga;

    @Column(name = "tip_veiculo", nullable=false, insertable=true, updatable=true)
    private String tipoVeiculo;

    @Column(name = "doca", nullable=false, insertable=true, updatable=true)
    private int doca;

    @ManyToMany(fetch=FetchType.LAZY)
    @JoinTable(name="carga_veiculo", schema="saecsystem",
    joinColumns=@JoinColumn(name="id_carga"),
    inverseJoinColumns=@JoinColumn(name="id_veiculo"))
    private Collection<Veiculo> veiculos;


    public Carga() {

    }


    public Carga(int id, int numCarga, int loja, String tipoCarga,
            String tipoVeiculo, int doca) {
        this.id = id;
        this.numCarga = numCarga;
        this.loja = loja;
        this.tipoCarga = tipoCarga;
        this.tipoVeiculo = tipoVeiculo;
        this.doca = doca;
    }

Set/Get

Classe veiculo :

@Entity
@Table(name = "veiculo",schema = "saecsystem")
public class Veiculo {

    @Id
    @Column (name = "id_veiculo" , nullable=false, insertable=true, updatable=true)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @Column(name = "placa", nullable=false, insertable=true, updatable=true)
    private String placa;

    @Column(name = "transportadora", nullable=false, insertable=true, updatable=true)
    private String transportadora;

    @Column(name = "lacre", nullable=true, insertable=true, updatable=true)
    private double lacre;


    @ManyToMany(fetch=FetchType.LAZY)
    @JoinTable(name="carga_veiculo", schema="saecsystem",
    joinColumns=@JoinColumn(name="id_veiculo"),
    inverseJoinColumns=@JoinColumn(name="id_carga"))
    private Collection<Carga> cargas;







    public Veiculo() {
        }

    public Veiculo(long id,String placa,String transportadora ){

        this.id = id;
        this.placa = placa;
        this.transportadora = transportadora;
    }

Controller para veiculo(pois os dados da carga já estão persistidos no banco) :

@ManagedBean
@SessionScoped
public class VeiculoMotoristaController {

    private Veiculo veiculo;
    private Motorista motorista;
    private int numroCarga;


    public VeiculoMotoristaController(){

        veiculo = new Veiculo();
        motorista = new Motorista();


    }

    public Veiculo getVeiculo() {
        return veiculo;
    }

    public void setVeiculo(Veiculo veiculo) {
        this.veiculo = veiculo;
    }

    public Motorista getMotorista() {
        return motorista;
    }

    public void setMotorista(Motorista motorista) {
        this.motorista = motorista;
    }

    public int getNumroCarga() {
        return numroCarga;
    }

    public void setNumroCarga(int numroCarga) {
        this.numroCarga = numroCarga;
    }

    public String adiconaVeiculoMotorista(){

        VeiculoMotoristaDao dao = new VeiculoMotoristaDaoimpl();
        dao.saveMotorista(motorista);
        dao.saveVeiculo(veiculo);
        juncaoVeiculoCarga();
        addGlobalMessage("Veículo inserido com sucesso");
        return "";
    }

    public void juncaoVeiculoCarga() {


        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();


        Query createQuery = session.createQuery("SELECT c.id FROM Carga c WHERE c.numCarga ="+ this.numroCarga);


        int idCarga = (Integer) createQuery.uniqueResult();

        System.out.println("NUMERO DO ID :" + idCarga);
        Veiculo veiculo = new Veiculo();

        Carga carga = (Carga)session.get(Carga.class, idCarga );

        veiculo.setCargas(new ArrayList<Carga>());

        veiculo.getCargas().add(carga);

        session.save(veiculo);

        t.commit();

        session.close();

    }



    public static void addGlobalMessage(String message) {  
        FacesMessage facesMessage = new FacesMessage(message);  
        FacesContext.getCurrentInstance().addMessage(null, facesMessage);

      }

pagina xhtml :

<div style="text-align: center;">

    <h:graphicImage value="/imagens/logo.gif" />


    <center><h:form>
        <h:graphicImage value="/imagens/disponibilizacao.gif" />
        <br />
        <p:growl id="carga" autoUpdate="true"/>

         <h:panelGrid columns="2">

            <p:outputLabel value="Numero da Carga :" />
                <p:inputText id="verVeic"  value="#{veiculoMotoristaController.numroCarga}"  size="15"  requiredMessage=" Todos os campos devem ser preenchidos" required="true" >
                    <f:validator validatorId="br.com.saec.validator.VeiculoValidator"/>
                    <p:message for="verVeic" styleClass="color:red"/>
                    <f:validateLength   maximum="20"/>
                </p:inputText>




            </h:panelGrid> 


            <h3 style="FONT-FAMILY: 'Andalus';">  Dados do veiculo  </h3>




            <p:panelGrid columns="2">

            <p:outputLabel value="Placa :" />
                <p:inputText id="placaveic" value="#{veiculoMotoristaController.veiculo.placa}" size="15"  requiredMessage=" Todos os campos devem ser preenchidos" required="true" >
                <f:validateLength for="placaveic" minimum="7" maximum="7"/>
                </p:inputText>

            <p:outputLabel value="Transportadora :" />
                <p:inputText id="transportadoraveic" value="#{veiculoMotoristaController.veiculo.transportadora}" size="15"  requiredMessage=" Todos os campos devem ser preenchidos" required="true"/>

                </p:panelGrid>

        <h3 style="FONT-FAMILY: 'Andalus';">  Dados do Motorista  </h3>

        <p:panelGrid columns="2" >

            <p:outputLabel value="Nome :" />
                <p:inputText id="NomeMot" value="#{veiculoMotoristaController.motorista.nome}" size="15"  requiredMessage=" Todos os campos devem ser preenchidos" required="true"/>

            <p:outputLabel value="CPF:" />
                <p:inputText id="CPFmot" value="#{veiculoMotoristaController.motorista.cpf}" size="15"  requiredMessage=" Todos os campos devem ser preenchidos" required="true">
                <f:validateLength for="CPFmot"  minimum="11"  maximum="11" />
                </p:inputText>

                </p:panelGrid>

        <br />

        <h:message for="verVeic"/>
        <h:message for="placaveic"/>
        <h:message for="transportadoraveic"/>
        <h:message for="NomeMot"/>
        <h:message for="CPFmot"/>
        <h:panelGrid columns="3">

            <p:commandButton  id="confirma" action="#{veiculoMotoristaController.adiconaVeiculoMotorista()}" 
            value="Confirmar Disponibilização" >
                <p:message for="confirma" styleClass="message"/>
            </p:commandButton>
            <p:commandButton value="Inicio" action="inicio.jsf" />
            <p:commandButton value="Status das cargas" />
            <h:message for="numCarga" errorStyle="color:red"/>
        </h:panelGrid>
    </h:form></center>
</div>
</body>
</html>


Erro :

Out 02, 2014 10:24:55 AM com.sun.faces.application.ActionListenerImpl processAction GRAVE: org.hibernate.PropertyValueException: not-null property references a null or transient value: br.com.saec.model.Veiculo.placa javax.faces.el.EvaluationException: org.hibernate.PropertyValueException: not-null property references a null or transient value: br.com.saec.model.Veiculo.placa at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102) at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)


O que estou com duvida e que o erro aponta para a placa da classe veiculo , mas a mesma esta sendo inserida no banco normalmente, e o campo esta configurado para não inserir valores nulos.

  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 hibernate mysql java-ee ou faça a sua própria pergunta.