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

Hibernate Java Discussion :

Certains champs null dans l'id


Sujet :

Hibernate Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Certains champs null dans l'id
    Bonjour,

    J'opère en ce moment sur une table dont l'id est composé de plusieurs champs qui peuvent parfois être à null.
    Lorsque je faire une requête par SQL Explorer, par exemple, ça marche très bien.
    Par contre, en passant par mon application Web, j'ai une erreur Java NullPointerException qui est due à ces id nuls.

    Je n'arrive pas a savoir si c'est une propriété des beans (car mon POJO en est un) ou d'Hibernate qui produit ce résultat.

    Est-ce que quelqu'un aurait déjà eu ce type de problème ?

    Pour le moment j'ai mis seulement un des champs de ma base en id dans mon POJO (qui lui n'est jamais null, mais pas unique non plus...) donc il y a des problèmes au niveau du résultat des requêtes (ce qui paraît normal).
    Je dois donc trouver une solution viable.

    Trois solutions:
    - permettre d'avoir deux id identiques (illogique mais pourquoi pas)
    - permettre d'avoir des colonnes à null dans l'id
    - ajouter une autre colonne (sachant que la table prend environ 100.000 lignes de plus par mois, une colonne de laquelle on peut se passer n'a rien a faire ici)

    Merci d'avance

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Un identifiant au sens clé primaire doit etre unique.
    Soit tu peux le garantir avec un clé composée de plusieurs colonnes, soit tu utilises une sequence ou equivalent qui te garantit l'unicité.
    Une clé composé de colonnes pouvant etre null est une bien mauvaise idée.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par fr1man Voir le message
    Une clé composé de colonnes pouvant etre null est une bien mauvaise idée.
    En quoi c'est une mauvaise idée ?

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Constructif dis-donc ...

    Mais le post ne réponds pas à ma question !
    Qui est
    Citation Envoyé par Toldy Voir le message
    En quoi c'est une mauvaise idée ?

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Comme c'est expliqué dans le post que je t'ai relayé, les SGBD vont refuser les valeurs null dans les clés primaires.
    Un clé est censé etre unique et non null.

    Pour moi une donnée à null est une donnée facultative, qui n'a rien à faire dans une clé primaire.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Je disais que cela ne réponds pas à ma question car en demandant "En quoi c'est un mauvaise idée ?" j'entendais "En quoi ce n'est pas logique".
    Ce qui n'est pas expliqué dans le post.

    C'est mauvais d'avoir sa définition de NULL non ?
    Je te propose une définition plus officielle, pour raison de compatibilité, et d'adaptation (tout ça, tout ça...), ici : http://www.w3schools.com/sql/sql_null_values.asp.

    Allons donc avec la définition que je t'ai donné.

    Prenons une table imaginaire sur laquelle se baser.
    Imaginons que j'ai une table CONTRATS_CLIENT qui à dans sa clé 4 données, (pouvant être nulles) nommées respectivement NOM_CLIENT, INTERMEDIAIRE_AVEC_CLIENT, CODE_TYPE_A, CODE_TYPE_B.

    Un même client peut me contacter de deux manières (avec ou sans intermédiaire) il faut donc différencier c'est cas là.
    De la même manière, ce client peut réaliser avec moi deux mêmes contrats de types différents.

    On a donc 4 contrats différents devant êtres différenciés par leurs id.
    La valeur NULL ne serait pas de bonne augure ici ?

    Merci d'avance pour ton aide.

  8. #8
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Je ne trouve pas logique de mélanger des règles métier avec la création de ta clé.
    Perso je ne le ferais pas comme ça.
    Soit mon contrat possède un numéro unique, ce qui très probable.
    Soit je gère cette table avec une clé technique, séquence ou autre.

  9. #9
    Membre chevronné 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
    Points : 2 120
    Points
    2 120
    Par défaut
    Une clé est un identifiant unique et non null, donc par cette definition ne peut pas etre null. Mauvaise idée car cela ne repondrait plus au critere d´identifiant.
    Et comme dit ton lien, NULL = missing unknown Data. Donc ne peut etre un identifiant.

  10. #10
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 42
    Points : 96
    Points
    96
    Par défaut
    Généralement, quand ce qui m'apparait comme étant la clef primaire naturelle d'un objet comporte plusieurs champs dont certains peuvent être null (ou encore peuvent être des dates), je préfère utiliser une clef technique (séquence Oracle, ou autre générateur de nombre ou de UUID) et, éventuellement, je définis ensuite une contrainte d'unicité sur les champs que j'avais envie d'utiliser comme clef primaire composée.
    Ceci aboutit généralement à la création d'un index unique (aussi efficace que celui d'une clef primaire), me garantit l'unicité de ce n-uplet sur mes entités et m'évite les problèmes de nullité d'un champ de clef primaire.

    Dans cette situation, il m'arrive aussi de me demander si je comprends bien le problème fonctionnel, si je n'ai pas raté un truc sur le contrat fonctionnel de ma classe/entité.

Discussions similaires

  1. Probleme de champs null dans un sous job.
    Par Koko22 dans le forum Développement de jobs
    Réponses: 7
    Dernier message: 24/11/2008, 15h31
  2. Permettre un champ Null dans un form
    Par amne26 dans le forum IHM
    Réponses: 3
    Dernier message: 27/09/2008, 12h19
  3. Problème champ NULL dans HTTPWebRequest
    Par thelpi dans le forum C#
    Réponses: 1
    Dernier message: 07/07/2008, 12h00
  4. Champs NULL dans une view
    Par Dohmaker dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/02/2008, 15h11
  5. Nbre de champs à NULL dans une table ?
    Par Pilgrimm01 dans le forum SQL
    Réponses: 4
    Dernier message: 17/07/2007, 15h46

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