Discussion: Insert join null

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    décembre 2011
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : décembre 2011
    Messages : 93
    Points : 53
    Points
    53

    Par défaut Insert join null

    Bonjour,

    je souhaiterai faire un insert mais j'obtiens toujours l'erreur SQLException: ORA-01400: cannot insert NULL into ("TABLE1"."REFTABLE21") avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    @Entity
    public class Table1
    {
    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.DETACH)
    @JoinColumn(name = "TABLE2", columnDefinition = "NUMBER(7,0) default '0'")
    public Table2Entity getReftable2() {
            return reftable2;
        }
    }
    La colonne TABLE1.REFTABLE2 est une référence à la primary key de Table2 mais n'est pas définie comme foreign key dans la DB.

    En base de donnée, la colonne REFTABLE1 est définie comme étant NUMBER(7,0) default '0' No nullable. Dans mon entity, cette colonne est définie comme un JoinColumn.
    Mon problème est que lors de l'insert, je ne connais pas encore la valeur de cette colonne. Je souhaiterai que lors de l'insert, cette colonne prenne la valeur "0" mais je n'y arrive pas.

    J'ai déjà essayé en passant un setRefTable1(null) mais sans succès...

    Merci pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2007
    Messages
    25 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2007
    Messages : 25 172
    Points : 48 150
    Points
    48 150

    Par défaut

    ben si tu veux y mettre null... Faut la définir nullable dans ton modèle oracle
    David Delbecq Java developer chez HMS Industrial Networks AB.     LinkedIn | Google+

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    décembre 2011
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : décembre 2011
    Messages : 93
    Points : 53
    Points
    53

    Par défaut

    Oui sauf que je n'ai pas les droits pour faire ce genre de modification...
    N'y a-t-il pas moyen d'initialiser a 0 une valeur d'une colonne join lorsque celle-ci n'est pas renseignée?

    Merci

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2007
    Messages
    25 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2007
    Messages : 25 172
    Points : 48 150
    Points
    48 150

    Par défaut

    c'est un join, ton "0" doit correspondre à un entité qui a l'id 0 si tu veux que ça marche. Dans ce cas, fait le, met une entité existante comme valeur qui te serve de "defaut".

    Si tu n'a pas la droit de modifier le modèle, alors il faut te demander pourquoi diable ton code a besoin d'ignorer le modèle. Si l'auteur de la DB a rendu ça obligatoire, il y a une bonne raison, donc remplis la valeur.
    David Delbecq Java developer chez HMS Industrial Networks AB.     LinkedIn | Google+

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    décembre 2011
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : décembre 2011
    Messages : 93
    Points : 53
    Points
    53

    Par défaut

    Je comprends le modèle qui a été choisi mais fonctionnelement, à la création de mon entité, la valeur du join n'est pas connu et est renseigné plus tard dans le processus.

    J'ai donc besoin d'initialiser cette valeur à 0 à la création mais aucune entité avec l'ID 0 n'existe (en DB le join n'a pas été défini).
    Je me demandais donc s'il n'y avait pas moyen de forcer hibernate à prendre une valeur par défaut quand le join n'est pas établi...

    Merci

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2007
    Messages
    25 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2007
    Messages : 25 172
    Points : 48 150
    Points
    48 150

    Par défaut

    tu peux expliquer comment est ton modèle de DB, ce n'est plus clair là maintenant.
    David Delbecq Java developer chez HMS Industrial Networks AB.     LinkedIn | Google+

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    décembre 2011
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : décembre 2011
    Messages : 93
    Points : 53
    Points
    53

    Par défaut

    Dans ma table TABLE1, j'ai une colonne REF_TABLE2 de type NUMBER(7,0), Nullable: No et DATA_DEFAULT= 0.

    Cette colonne REF_TABLE2 est en fait une référence à la primary key de TABLE2 (TABLE2.ID) mais n'est pas définie comme étant une foreign key.
    Il s'agit d'une référence "logique" dans le sens où la DB ne vérifie pas si la donnée remplie dans REF_TABLE2 existe ou non (c'est fait par programmation).
    Dans le principe, il s'agit bien d'une clé étrangère mais la base de donnée est assez vieille et n'a pas été définie comme telle à l'époque...

    A la création de mon enregistrement dans TABLE1, cette référence REF_TABLE2 n'est pas connue et est donc initialisée à 0 (même s'il n'y a aucune entrée TABLE2.ID = 0).

    Dans mon model hibernate, j'ai défini la colonne REF_TABLE2 comme étant un join sur TABLE2.ID. A la création, je veux donc créer un enregistrement avec REF_TABLE2 = 0 mais j'obtiens l'erreur car ma colonne étant définie comme un join, il s'attend à avoir une entité...


    J'espère avoir été plus clair.

    Merci pour ton aide.

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2007
    Messages
    25 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2007
    Messages : 25 172
    Points : 48 150
    Points
    48 150

    Par défaut

    Oui.

    Soit tu patche ta base de données pour que ce soit une vraie foreign key, et tu remplace de default 0 par un null
    Soit tu fais un modèle hibernate qui correspond à cette db: tu retire ton many-to-one avec entité et tu le remplace par un Long.

    Garbage in garbage out: db moisie => modèle objet moisi. (aussi appelé principe du pas de bras, pas de chocolat)
    David Delbecq Java developer chez HMS Industrial Networks AB.     LinkedIn | Google+

Discussions similaires

  1. [AC-2007] Inner Join & null
    Par J_help dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 10/07/2009, 17h05
  2. Récupération ID après INSERT retourne NULL
    Par Jean-Marc68 dans le forum ASP.NET
    Réponses: 7
    Dernier message: 06/12/2007, 19h55
  3. [SQL] Insertion valeur NULL de php vers SQL
    Par tkwleboss dans le forum PHP & SGBD
    Réponses: 4
    Dernier message: 23/11/2007, 13h21
  4. insertion valeur null en tant qu'administrateur
    Par new_wave dans le forum SQL
    Réponses: 3
    Dernier message: 06/11/2007, 11h28
  5. [SQL SERVER] Inner join null ?
    Par diaboloche dans le forum Langage SQL
    Réponses: 1
    Dernier message: 06/03/2007, 15h59

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