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

Développement Web en Java Discussion :

Comparaison deux List d'EntityClass


Sujet :

Développement Web en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2013
    Messages : 45
    Par défaut Comparaison deux List d'EntityClass
    Bonjour à tous!
    J'utilise JSF,EJB3,JPA,et comme IDE NetBeans.
    **********
    Énoncé:
    il y'a deux base de donnée BDD1 et BDD2, la BDD2 prend toutes ces données de la BDD1; et cette opération se fait chaque semaine;
    donc pour ne pas recopier des article qui ont déjà été copier les semaines passés(article = <Mohamed, Zidane, 04/05/72, Alger>)
    ont copiera pour chaque table, uniquement les articles non existant sur la BDD2, pour gagner du temps.
    **********
    Solution Théorique Proposée: (je n'ai pas pu la mettre en pratique)
    vu le grand nombre de table a copier, il est préférable de faire une seule classe on l’appellera <Comparer> et dans cette dernière on aura une méthode <renvoiList> qui renvoi une liste d'articles qui sont dans une table de la BDD1 et ne se trouve pas dans la table équivalente de la BDD2;
    Exemple: il y'a deux tables dans la BDD1 <CLIENT1> et <COMMANDE1> et deux tables équivalentes dans la BDD2 <CLIENT2> et <COMMANDE2>.
    dans le session bean
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public List <CLIENT2> getListClient() {
            Query q = em.createNamedQuery("Client1.findAll");
            Query qq = em.createNamedQuery("Client2.findAll");
            //************************************
     
     
            Comparer <Client2> comparer= new Comparer<Client2>(q.getResultList(), qq.getResultList());
     
     
            //*************************************
            return comparer.renvoiList();
        }
    la dernière ligne envoi une liste dont on a besoin.
    **********
    Problème:
    dans la classe Comparer, je ne sais pas comment je pourrais accéder aux identifiants, car je veux faire une classe générale pour toutes les tables, puisque j'ai essayé avec <equals> cela ne voulait pas marcher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(list1.get(i).equals(list2.get(j)))
    **********
    Merci d'avance pour votre aide, car je suis avec se problème depuis plus de 15 jours;
    Cordialement.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Septembre 2011
    Messages : 196
    Par défaut
    Pour que ton equals fonctionne correctement, à mon avis tu devrais redéfinir la méthode equals dans tes différentes entités JPA, afin de faire une comparaison uniquement sur l'id.

    Ensuite l'instruction
    if(list1.get(i).equals(list2.get(j)))
    devrait fonctionner correctement.

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Donc, si je te suis bien, pour ne pas devoir tout copier et aller plus vite, tu charge tout en mémoire et tu compare tout? Donc finalement tu charge autant de données que si tu copiais tout mais, en plus,tu rajoute du temps de développement et du temps de traitement au dessus


    Le moyen le plus rapide pour copier entre deux bases, à supposer sur le même serveur, ça reste du SQL avec un truc du genre

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into database2.tableX from (select * from database1.tableX T where where T.id not in (select id from database2.tableX))

    Parce qu'avec ton code java, le ratio données en mémoire / donnée à effectivement transférer va grimper très très vite. Et tu va vitre te retrouver à mettre des heures pour faire une opération qui ne devrait durer que quelques secondes.

  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2013
    Messages : 45
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Donc, si je te suis bien, pour ne pas devoir tout copier et aller plus vite, tu charge tout en mémoire et tu compare tout? Donc finalement tu charge autant de données que si tu copiais tout mais, en plus,tu rajoute du temps de développement et du temps de traitement au dessus


    Le moyen le plus rapide pour copier entre deux bases, à supposer sur le même serveur, ça reste du SQL avec un truc du genre

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into database2.tableX from (select * from database1.tableX T where where T.id not in (select id from database2.tableX))

    Parce qu'avec ton code java, le ratio données en mémoire / donnée à effectivement transférer va grimper très très vite. Et tu va vitre te retrouver à mettre des heures pour faire une opération qui ne devrait durer que quelques secondes.
    je vous remercie pour votre réponse je la trouve de loin la plus correcte, cependant j'ai un savoir très très modeste dans JPA et EJB, donc je ne sais pas comment convertir le SQL pour qu'il s'adapte avec la JPA, et plus grave encore où l’écrire.
    je vous remercie

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par gerxwcv Voir le message
    je ne sais pas comment convertir le SQL pour qu'il s'adapte avec la JPA, et plus grave encore où l’écrire.
    je vous remercie
    Ben justement, le but c'est de ne pas passer par la couche JPA

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    entityManager.createNativeQuery(".....").executeUpdate();

  6. #6
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2013
    Messages : 45
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Ben justement, le but c'est de ne pas passer par la couche JPA

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    entityManager.createNativeQuery(".....").executeUpdate();
    Merci Beaucoup Mr, le problème est résolu, je l'ai de ce fait marqué comme résolu, mais si vous pouvez SVP me donner la requête, et expliquer plus, car il faut récupérer deux tables de deux shema différents pour le test, et moi je suis connecté au préalable à un seul shema avec JPA,
    cela sera encore plus complet et clair pour moi et aussi pour tout le monde Mr, car la première est un peu vague.
    je vous remercie.

  7. #7
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2013
    Messages : 45
    Par défaut
    Citation Envoyé par oliv37 Voir le message
    Pour que ton equals fonctionne correctement, à mon avis tu devrais redéfinir la méthode equals dans tes différentes entités JPA, afin de faire une comparaison uniquement sur l'id.

    Ensuite l'instruction devrait fonctionner correctement.
    je suis d'accord avec toi oui , mais cette solution a mon avis ne marche pas pour une classe de comparaison Générale pour toutes les entités JPA, vu que mon problème est de ne pouvoir faire le code suivant dans la classe de comparaison :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(list1.get(i).getID.equals(list2.get(j).getID)
    chose que je peux faire dans une session bean et pour une entité précise.
    dis moi comment je peux la faire ( avoir le getID(i) pour une liste que la classe considéré comme list d'objet, et pas précisément une list d'article);
    MERCI BEAUCOUP

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

Discussions similaires

  1. [Débutant] Comparaison de deux listes
    Par chesrome dans le forum Windows Forms
    Réponses: 1
    Dernier message: 28/12/2012, 12h33
  2. comparaison de deux listes
    Par karaudrey88 dans le forum Langage
    Réponses: 4
    Dernier message: 18/12/2012, 14h04
  3. comparaison les éléments deux listes
    Par minooo dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 18/06/2012, 09h52
  4. Comparaison de deux listes
    Par Isabella83 dans le forum Langage
    Réponses: 12
    Dernier message: 30/03/2012, 12h11
  5. Comparaison de deux listes de fichier
    Par jackiechen dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 07/01/2008, 16h28

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