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

Wildfly/JBoss Java Discussion :

[ EJB ] [JBoss ] [ XDoclet ] probleme avec cascade-delete


Sujet :

Wildfly/JBoss Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 48
    Points : 36
    Points
    36
    Par défaut [ EJB ] [JBoss ] [ XDoclet ] probleme avec cascade-delete
    Bonjour à tous,

    J'ai quelque soucis pour gerer un cascade delete particulier dans une relation one-to-many.
    J'ai dans ma DB une une table localisations (many) faisant référence(colonne num_orga) à ma table unites (one). Je veux que lorsque je supprime une unite, les localisations concernées soient également supprimées.
    J'ai un EJB UniteOrganisationnelleBean et un EJB LocalisationBean dont voici le code concernant la relation posant probleme:
    • Dans UniteOrganisationnelleBean:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      /**
        * @ejb.relation name = "Unite-Localisations"
        *      role-name = "Unite"
        */
       public abstract Collection getLocalisations();
    • Dans LocalisationBean:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      /**
        * @ejb.relation name = "Unite-Localisations"
        *      role-name = "Localisations"
        *      cascade-delete="yes"
        * @jboss.relation related-pk-field = "numero"
        *        fk-column="num_orga"
        *        fk-constraint="true"
        */
       public abstract UniteOrganisationnelleLocal getUniteOrganisationnelle();
    Je n'ai pas de ON DELETE CASCADE du cote de ma DB. J'utilise SQL serveur 2000.
    Lorsque j'essaye, de mon programme, de faire un remove() sur une "instance" d'uniteOrganisationnelleBean, j'ai cette exception:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    
    java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]
    Cannot insert the value NULL into column 'num_orga', table 'PlanAction.dbo.localisations'; 
    column does not allow nulls. UPDATE fails.
    
    Pourtant j'ai testé une autre relation(One-to-One) avec cascade-delete avec les tags XDoclet identiques et cela fonctionne.
    Quelqu'un pourrait-il me dire ce qui ne va pas dans mon code?

    Une petite question en passant: en ce qui concerne le ON DELETE CASCADE du cote SGBD, est-il necessaire/permis/interdit si cascade-delete est précisé coté EJB?

    Je n'ai pas mis le contenu du ejb-jar.xml pour gagner de la place. Si quelqu'un aimerait le voir qu'il n'hésite pas à me le dire.

    Merci d'avance et un bon week-end à tous!

  2. #2
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 48
    Points : 36
    Points
    36
    Par défaut
    J'ai modifié la DB pour permettre la valeur NULL pour la FK qui posait probleme et je n'ai plus d'erreur (forcément) et le cascade-delete fonctionne correctement.
    Je vais peut-être me faire taper sur les doigts si quelqu'un s'en rend compte mais je n'ai pas trouvé d'autre solution...Si quelqu'un a une idée...
    Je met quand même résolu...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2006
    Messages : 38
    Points : 37
    Points
    37
    Par défaut
    salut

    j'ai une idée mais pas une solution !

    pour les suppressions en cascade, jboss fonctionne comme ça :

    In JBossCMP this is implemented as:
    1. destroy relationship;
    2. synchronize the state (set foreign key fields to NULL in the database to be able to remove the parent);
    3. remove the parent instance;
    4. for each child repeat the procedure starting from 1.
    le lien : http://wiki.jboss.org/wiki/Wiki.jsp?...hCascadeDelete (pour optimiser, il faut utiliser batchcascadedelete dans jbosscmp-jdbc.xml apparement, et il supprime tous les fils d'un coup )

    Pour ton pb, si j'ai bien compris, il faut dire à JBoss de commencer par supprimer les fils.

    Si tu trouves la commande, cela m'interesse aussi

    bye

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2006
    Messages : 38
    Points : 37
    Points
    37
    Par défaut
    essaie de rajouter le batchcascadedelete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /**
      * @ejb.relation name = "Unite-Localisations"
      *      role-name = "Localisations"
      *      cascade-delete="yes"
      * @jboss.relation related-pk-field = "numero"
      *        fk-column="num_orga"
      *        fk-constraint="true"
      *        batch-cascade-delete="true"
      */
     public abstract UniteOrganisationnelleLocal getUniteOrganisationnelle();
    Je pense que ça devrait marcher, normalement....

    bye

  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 48
    Points : 36
    Points
    36
    Par défaut
    Merci pour ta réponse dauggui.

    Je suis très en retard sur mon projet et je dois le présenter dans quelques jours... Je n'aurai peut-être pas le temps d'effectuer les modifications, l'important pour l'instant est que tout ce passe bien lors de la présentation mais dès que j'ai un peu de temps (si j'en trouve) j'essayerai le batch-cascade-delete et je te tiens au courant.

    A+

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

Discussions similaires

  1. Xdoclet probleme avec les caractères"<" et ">"
    Par chriscoolletoubibe dans le forum Hibernate
    Réponses: 1
    Dernier message: 20/04/2007, 14h26
  2. probleme avec Xdoclet jboss IDE
    Par arize dans le forum Wildfly/JBoss
    Réponses: 9
    Dernier message: 13/12/2006, 15h20
  3. [EJB][jboss][struts]probleme de logic:iterate
    Par jamal_b dans le forum Wildfly/JBoss
    Réponses: 25
    Dernier message: 27/04/2006, 20h46
  4. Pb avec ON DELETE/UPDATE CASCADE
    Par trotters213 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 09/03/2005, 11h55
  5. [EJB2.1 Entity] [XDOCLET]Cascade delete
    Par SEMPERE Benjamin dans le forum Java EE
    Réponses: 3
    Dernier message: 23/02/2005, 09h29

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