not-null属性在Hibernate双向关系中引用null或transient值

时间:2017-01-22 20:55:09

标签: java spring hibernate spring-mvc one-to-many

我在通过hibernate方法向客户端添加命令时遇到问题。 当我注册客户端和命令时,我收到以下错误:

The picture error getting

这是我的代码:

客户端模型

package ma.commande.model;



import java.io.Serializable;
import java.util.*;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;


import com.fasterxml.jackson.annotation.JsonIgnore;




@Entity
@Table(name = "client")
public class Client implements Serializable  {

    @Id
    @GeneratedValue
    @Column(name = "id_client",nullable=false)
    private Integer id_client;

    @Column(name = "nomComplet")
    private String nomComplet;

    @Column(name = "email")
    private String email;

    @Column(name = "tel")
    private String tel;

    @Column(name = "sexe")
    private String sexe;

    @JsonIgnore
    @OneToMany(cascade = CascadeType.ALL,mappedBy="client")
    private Set<Commande> commandes = new HashSet();



    public Client() {
        super();
        // TODO Auto-generated constructor stub
    }

    public Client(String nomComplet, String email, String tel, String sexe) {
        super();
        this.nomComplet = nomComplet;
        this.email = email;
        this.tel = tel;
        this.sexe = sexe;
    }

    public Integer getId_client() {
        return id_client;
    }

    public void setId_client(Integer id_client) {
        this.id_client = id_client;
    }

    public String getNomComplet() {
        return nomComplet;
    }

    public void setNomComplet(String nomComplet) {
        this.nomComplet = nomComplet;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getTel() {
        return tel;
    }

    public void setTel(String tel) {
        this.tel = tel;
    }

    public String getSexe() {
        return sexe;
    }

    public void setSexe(String sexe) {
        this.sexe = sexe;
    }



    public Set<Commande> getCommandes() {
        return commandes;
    }

    public void setCommandes(Set<Commande> commandes) {
        this.commandes = commandes;
    }



    public void addCommande(Commande commande){
        commandes.add(commande);
        commande.setClient(this);
    }



}

指挥官模型

package ma.commande.model;



import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;




@Entity
@Table(name = "commande")
public class Commande {

    @Id
    @GeneratedValue
    @Column(name = "id_Commande",nullable=false)
    private Integer id_Commande;
    @Column(name = "dateComm")
    private String dateComm;
    @Column(name = "dateLiv")
    private String dateLiv;
    @Column(name = "adresse")
    private String adresse;
    @Column(name = "statutCommande")
    private String statutCommande;
    @ManyToOne
    @JoinColumn(name="id_client",nullable = false,columnDefinition="Integer")
    private Client client;


    public Client getClient() {
        return client;
    }

    public void setClient(Client client) {
        this.client = client;

    }



    public Commande() {
        super();
        // TODO Auto-generated constructor stub
    }

    public Commande(String statutCommande, String dateComm, String dateLiv, String adresse) {
        super();
        this.dateComm = dateComm;
        this.dateLiv = dateLiv;
        this.adresse = adresse;
        this.statutCommande = statutCommande;
    }





    public int getId_Commande() {
        return id_Commande;
    }

    public void setId_Commande(Integer id_Commande) {
        this.id_Commande = id_Commande;
    }

    public String getDateComm() {
        return dateComm;
    }

    public void setDateComm(String dateComm) {
        this.dateComm = dateComm;
    }

    public String getDateLiv() {
        return dateLiv;
    }

    public void setDateLiv(String dateLiv) {
        this.dateLiv = dateLiv;
    }

    public String getAdresse() {
        return adresse;
    }

    public void setAdresse(String adresse) {
        this.adresse = adresse;
    }

    public String getStatutCommande() {
        return statutCommande;
    }

    public void setStatutCommande(String statutCommande) {
        this.statutCommande = statutCommande;
    }



}

ClientDAO

package ma.commande.dao;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import ma.commande.model.Client;
import ma.commande.model.Commande;


@Repository

    public class ClientDAO implements IClientDAO {

        @Override
        public void addClient(Client client) {
            Commande commande = new Commande();
            Set<Commande> commandes = new HashSet<Commande>() ; 
            commandes.add(commande);
            client.setCommandes(commandes);
            commande.setClient(client);
            getCurrentSession().persist(client);

        }
    }

CommandeDAO

package ma.commande.dao;


import java.util.List;


import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import ma.commande.model.Client;
import ma.commande.model.Commande;

@Repository
public class CommandeDAO implements ICommandeDAO {



    @Override
    public void addCommande(Commande commande) {
        Client client= new Client(); 
        client.addCommande(commande);
        getCurrentSession().persist(commande);
    }

dataPersist

package ma.commande.alimentationData;

import java.util.List;


import ma.commande.model.Client;
import ma.commande.model.Commande;
import ma.commande.service.ClientService;
import ma.commande.service.CommandeService;

public class GestionCommandeExemple {
    public static void main(String[] args) {

      ClientService clientService = new ClientService();

        /**** Insertion des clients ********/
        Client client1 = new Client("client1", "client1@gmail.com", "060000000", "H");
        Client client2 = new Client("client2", "client2@gmail.com", "060000000", "F");
        Client client3 = new Client("client3", "client3@gmail.com", "060000000", "F");

        System.out.println("*** Persist - start ***");
        clientService.addClient(client1);
        clientService.addClient(client2);
        clientService.addClient(client3);
        List<Client> clients1 = clientService.findAllClients();
        System.out.println("Clients Persisted are :");
        for (Client c : clients1) {
            System.out.println("-" + c.toString());
        }
        System.out.println("*** Persist - end ***");

        CommandeService commandeService = new CommandeService();


        /**** Insertion des commandes ********/
        Commande commande1 = new Commande("15/07/2016", "16/07/2016", "25 rue 1","Annulee");
        Commande commande2 = new Commande("15/07/2016", "16/07/2016", "25 rue 1","En Cours");
        Commande commande3 = new Commande("15/07/2016", "16/07/2016", "25 rue 1","Livree");

        System.out.println("*** addCommande - start ***");

        commandeService.addCommande(commande1);
        commandeService.addCommande(commande2);
        commandeService.addCommande(commande3);
        List<Commande> commandes1 = commandeService.findAllCommandes();
        System.out.println("commandes addCommanded are :");
        for (Commande c : commandes1) {
            System.out.println("-" + c.toString());
        }
        System.out.println("*** addCommande - end ***");




        System.exit(0);
    }
}

ClientController

@RequestMapping(value = "/client/", method = RequestMethod.POST)
    public ResponseEntity<Void> addClient(@RequestBody Client client, UriComponentsBuilder builder) {
        clientService.addClient(client);
        HttpHeaders headers = new HttpHeaders();
        headers.setLocation(builder.path("/client/{id}").buildAndExpand(client.getId_client()).toUri());
        return new ResponseEntity<Void>(headers, HttpStatus.CREATED);
    }

CommandeController

@RequestMapping(value = "/commande/", method = RequestMethod.POST)
    public ResponseEntity<Void> addCommande(@RequestBody Commande commande,UriComponentsBuilder builder) {
        commandeService.addCommande(commande);
        HttpHeaders headers = new HttpHeaders();
        headers.setLocation(builder.path("/commande/{id}").buildAndExpand(commande.getId_Commande()).toUri());
        return new ResponseEntity<Void>(headers, HttpStatus.CREATED);
    }

1 个答案:

答案 0 :(得分:0)

你正在尝试在没有客户的情况下坚持使用Commade。 在持久化之前将客户端设置为命令。

 ...
 commande1.setClient(client1);
 commandeService.addCommande(commande1);
 ...