Bonjour,
on m'a demandé de parser un fichier et d'enregistrer les infos en base, le fichier correspond a une 100 aine de tables.
On ma indiqué vouloir du générique, pour ne pas faire une méthode par type de données a enregistré (table) et afin qu'en cas d'ajout de modification ou autre du fichier à parser, les changements à faire soient minimes et ne quasi pas toucher au code. J'ai indiqué que c’était un peu usine à gaz et surtout que niveau perf c’était moyen.
J'ai bossé la dessus, j'ai fais mes classes, j'ai une enum qui contient : nomDeTable("nomVariable1", "tailleDuChampDansLeFichier", "nomVariable2", "tailleDuChampDansLeFichier", etc...);
Ca fonctionne pour la lecture et l'enregistrement, en fait je recupère la classe, je fais un entity = c.newInstance() ou c'est est la class. Je recupère dans l'enum de nom de la variable, je fais un set de la variable avec en paramétre un substring en utilisant la "taille du champ dans le fichier" (nombre de caractère à recuperer dans la ligne) et je fais ca avec tous les setters. Entre temps je donne un type à la variable pour que le setter ne m'envoi pas chi*r.
Ca fonctionne, mais mon (mes) problèmes :
- C'est bien d’enregistrer, mais si l'entité existe déjà la base, il faut la mettre à jour. Le problème, c'est la pk ! Lorsqu'elle correspond à une seule variable, pas de soucis, mais quand il s'agit d'une pk qui est un numéro attribué auto, ou qu'il s'agit d'un ID composé, je n'arrive pas à récupérer les ID. J'ai testé un truc qui fonctionne bien, mais niveau perf c'est catastrophique, c'est récupérer la totalité de la table en question et d'utiliser un equals que j'ai redéfini. Mais vous imaginez bien la cata lorsqu'il faut récupérer une table qui contient 2000 enregistrements. J'ai voulu utiliser l'embaddable et embedded id mais le problème, c'est que comme je set les variables une a une, je n'arrive pas a créer la pk puisque je ne passe pas par le constructeur. J'ai voulu tester (rapidement) la création d'une entité avec le constructeur non vide mais le problème, c'est qu'il n'y a jamais le même nombre de paramètres suivant l'entité, donc comment passer les données "découpées" dans le constructeur ?
- On m'a dit, que vu la complexité et que les perf sont moins bonnes, que si je voulais je pouvais ne pas partir sur le generique mais en gardant toujours une enum ou autre qui defini comment decouper chaque ligne. Le problème, il me reste plus que 3 semaines, et j'aurais aimé avoir quelque chose à présenter au jury, sinon c'est la m**de.
Donc vu que je n'ai personne pour m'aider la bas, que mon "tuteur" n'est jamais présent, qu'il n'est venu me voir qu'une seule fois (hier) depuis le début du stage, je me permet de vous solliciter afin de savoir si vous auriez une "solution" pour terminer en générique ou une solution assez rapide à mettre en place (sachant que les classes sont faites, l'enum aussi, et qu'il n'y a "que" le code métier a terminer) qui n'utiliserait pas la généricité ?
Je vous remercie d'avance, ça me ferais ch*er de me planter alors que la formation se passe super bien, que je n'ai que des compliments, que je me donne a fond, mais que j'ai choisi en toute connaissance de cause, le stage ayant un niveau de difficulté le plus élevé pour en apprendre le plus possible (ce qui n'est pas le cas vu que je me retrouve seule, sans aide).
J’élèverai un autel à votre gloire, prierai et sacrifierai des animaux en l'honneur au forum, si vous arrivez à m'extirper de se merd*er.
Partager