IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JPA Java Discussion :

JPA @OneToMany constraint not null


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 99
    Par défaut JPA @OneToMany constraint not null
    Bonjour,

    J'ai un souci lors de la persistance d'une entité avec JPA et Hibernate.
    Mon entité Client contient une jointure @OneToMany vers une liste de Contact. Au moment de persister la nouvelle entité Client qui contient des nouveaux Contact, j'obtiens cette erreur :
    org.postgresql.util.PSQLException: ERREUR: une valeur NULL viole la contrainte NOT NULL de la colonne « client_id »
    Mes tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE CLIENT (
    	id SERIAL,
    	ref VARCHAR(8) UNIQUE NOT NULL,
    	lastname VARCHAR(50) NOT NULL,
    	firstname VARCHAR(50),
            ...
    	PRIMARY KEY (id)
    );
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE CONTACT (
    	id SERIAL,
    	client_id INTEGER NOT NULL,
    	lastname VARCHAR(50) NOT NULL,
    	firstname VARCHAR(50),
            ...
    	PRIMARY KEY (id),
    	FOREIGN KEY (client_id) REFERENCES CLIENT (id)
    );
    Mes entités :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    @Entity
    @Table(name = "client", uniqueConstraints = @UniqueConstraint(columnNames = "ref") )
    public class Client {
    	private Integer id;
    	private String ref;
    	private String lastname;
    	private String firstname;
            private Set<Contact> contacts = new HashSet<Contact>(0);
            ...
     
            @Id
    	@SequenceGenerator(name = "client_id_seq", sequenceName = "client_id_seq", allocationSize = 1)
    	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "client_id_seq")
    	@Column(name = "id", unique = true, nullable = false, updatable = false)
    	public Integer getId() {
    		return this.id;
    	}
     
    	public void setId(Integer id) {
    		this.id = id;
    	}
     
            ...
     
    	@OneToMany(fetch = FetchType.LAZY, mappedBy = "client", cascade = {CascadeType.ALL})
    	public Set<Contact> getContacts() {
    		return this.contacts;
    	}
     
    	public void setContacts(Set<Contact> contacts) {
    		this.contacts = contacts;
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    @Entity
    @Table(name = "contact")
    public class Contact {
     
    	private Integer id;
    	private Client client;
    	private String lastname;
    	private String firstname;
            ...
     
            @Id
    	@SequenceGenerator(name = "contact_id_seq", sequenceName = "contact_id_seq", allocationSize = 1)
    	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "contact_id_seq")
    	@Column(name = "id", unique = true, nullable = false, updatable = false)
    	public Integer getId() {
    		return this.id;
    	}
     
    	public void setId(Integer id) {
    		this.id = id;
    	}
     
    	@ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.ALL})
    	@JoinColumn(name = "client_id", nullable = false, updatable = false, insertable = true)
    	public Client getClient() {
    		return this.client;
    	}
     
    	public void setClient(Client client) {
    		this.client = client;
    	}
     
            ...
    }
    Sauriez-vous comment faire pour que le nouvel id de Client soit définit dans les entités Contact ?

    Merci pour votre aide.

  2. #2
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    salut,
    peux-tu nous montrer le code de persistence de l´objet en question?

    Eric

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 99
    Par défaut
    Je fais un persist classique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public void persist(final E transientInstance) {
    	LOGGER.debug("persisting " + this.persistentClassName + " instance");
    	try {
    		this.entityManager.persist(transientInstance);
    		LOGGER.debug("persist " + this.persistentClassName + " successful");
    	} catch (RuntimeException re) {
    		LOGGER.error("persist " + this.persistentClassName + " failed", re);
    		throw re;
    	}
    }

  4. #4
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    salut
    ,
    comment est ce que tu crees cet objet:
    Eric

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 99
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Client client = new Client();
    client.setRef("myRef");
    client.setLastname("myLastname");
     
    Contact contact = new Contact();
    contact.setLastname("myLastname");
     
    Set<Contact> contactList = new HashSet<Contact>();
    contactList.add(contact);
    client.setContacts(contactList);
     
    this.dao.persist(client);
    Si je ne définis pas de contact, mon entité est correctement insérée en bdd.

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par nanourene Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Client client = new Client();
    client.setRef("myRef");
    client.setLastname("myLastname");
     
    Contact contact = new Contact();
    contact.setLastname("myLastname");
     
    Set<Contact> contactList = new HashSet<Contact>();
    contactList.add(contact);
    client.setContacts(contactList);
     
    this.dao.persist(client);
    Si je ne définis pas de contact, mon entité est correctement insérée en bdd.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    contact.setClient(client);
    ou mieux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    client.addContact(contact);
    qui veillera à ce que tout soit fait correctement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/09/2014, 21h51
  2. Réponses: 3
    Dernier message: 14/03/2012, 14h09
  3. Distinguer les CHECK CONSTRAINTS des NOT NULL
    Par Wurlitzer dans le forum Oracle
    Réponses: 16
    Dernier message: 28/09/2006, 11h50
  4. Réponses: 8
    Dernier message: 24/07/2003, 10h45
  5. "ALTERER" une col. NULL en NOT NULL - Int
    Par Gandalf24 dans le forum SQL
    Réponses: 2
    Dernier message: 28/12/2002, 00h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo