Bonjour.J'aimerais récupéré de façon automatique la liste de tout les entity classe dans n'importe quel projet java.Comment faire?
Discussion :
Bonjour.J'aimerais récupéré de façon automatique la liste de tout les entity classe dans n'importe quel projet java.Comment faire?
Tu veux dire scanner les sources du projet ou récupérer ça à l'exécution?
A l'exécution, tu peux le récupérer depuis l'entity manager:
Code : Sélectionner tout - Visualiser dans une fenêtre à part em.getEntityManagerFactory().getMetamodel().getEntities()
Ok merci. J'ai reussi a le faire.
Menant je veux recuperer le schema de n'importe qu'elle base de donnés en utilisant JPA .comment faire ?
Je dirais que tu ne peux pas
il faut le faire en sql (via éventuellement les native query jpa), mais les commandes sont il me semble différentes d'un sgbd à l'autre.
En fait j'aimerais créer la structure de la table avec ca. Mais j'ai trouvé une autre methode (Persistence.generateSchema("Nom", null)) qui permet de le faire mais ça prend en parametre le nom de l'unite de persistance que j'ai défini par l'annotation @PeristenceContext(UnitName="example").
Menant j'aimerais recuperer le nom de l’unité de persistance defini dans un projet dynamiquement par une methode. et la passer en parametre dans ma methode (Persistence.generateSchema("backupejbPU2", null)). Vous en avez une idée
au final c'est quoi le but, tu veux créer la base lors du démarrage? Si c'est ça, c'est déjà prévu dans les systèmes de persitence. Par exemple avec hibernate, tu mets hbm2ddl.auto à "CREATE" et si la base existe pas, elle sera créée.
Il s'agit d'un projet de sauvegarde et de restauration de base de données donc une libraire indépendant des base de données que je suis en train de faire.Menant j'ai sauvegarder les données dans un fichier xml. Normalement je dois mettre dans ce fichier aussi la structure de la base de données.
Donc je veux faire un truc indépendant de l’implémentation de JPA .
J'ai trouve que lors du démarrage si on met sur None la méthode Persistence.generateSchema("NomPersistance",null) peut créer ca.
Menant je cherche a recuperer ce nom d’unité de persistance dans un projet
Donc JPA est une très mauvaise idée car JPA nécessite de connaitre à la compilation la structure de la base
De plus, par expérience, explorer des données avec JPA pour les sauvegarder c'est facile, les restaurer avec JPA, je préfère encore me balader déguisé en bambou au milieu des pandas. Tu as tellement de choses dans JPA qui vont te pêter à la gueule...
sauf que JPA ne connait qu'un partie: les tables et les contraintes visibles. Il ne connait pas les trigger, il ne connait pas les index, il ne connait pas les procédures stockée, ...
Du sql quoi.Donc je veux faire un truc indépendant de l’implémentation de JPA .
Si on met quoi sur None? Ton EntityManager, il est liée à une base, d'office. Donc autant lui demander à son instanciation de créer la base comme mentionné.J'ai trouve que lors du démarrage si on met sur None la méthode Persistence.generateSchema("NomPersistance",null) peut créer ca.
Oui avec JPA on peut a la compilation a partir des classes entity defini dans le projet creer la structure de la base . Si seulement si On met Table Generation Strategie a Create (Creation de la base de données) ou Drop and Create(Suppression si il existe et creation) . Mais je pense que par defaut lors du deploiement de l'application c'est sur None (Ne rien faire) .Donc JPA est une très mauvaise idée car JPA nécessite de connaitre à la compilation la structure de la base
De plus, par expérience, explorer des données avec JPA pour les sauvegarder c'est facile, les restaurer avec JPA, je préfère encore me balader déguisé en bambou au milieu des pandas. Tu as tellement de choses dans JPA qui vont te pêter à la gueule...
Donc dans cet cas JPA ne creer la structure si la base de données. Donc cette méthode va me permettre de même si Table Generation Strategy n'est par defaut sur Create ou Create and Drope.
Comment demander a EntityManager a son instanciation de creer la base de données? je pense que on doit utiliser une methode.Puisque elle est lié a une unkite de persistance .Donc je veux recuperer ce nom afin par cette methode creer la base de données a son instanciation.Si on met quoi sur None? Ton EntityManager, il est liée à une base, d'office. Donc autant lui demander à son instanciation de créer la base comme mentionné.
Donc comment faire pour recuperer le nom de l'unite de persistance. Vous me comprenez
J'ai trouve la classe PersistanceUtil qui a pour attribut UnitName qui est le nom mais je n'arrive pas a recuperer.
La question c'est poruquoi tu te complique la vie alors que tu l'a dit toit même, il suffit de mettre ce paramètre à create et la table sera créée au besoin
De toutes façon, si le paramètre n'est pas à create et que les tables ne sont pas là, JPA ne démarrera pas donc pas d'entity manager il me semble.
En mettant le paramètre dans le fichier de config, comme tu l'a indiqué.
Tu dois le connaitre et le mettre dans une fichier de config que tu lit au démarrage. Ou l'hardcoder dans ton code, c'est pas comme si tu allais changer ce nom en cours de projet.J'ai trouve la classe PersistanceUtil qui a pour attribut UnitName qui est le nom mais je n'arrive pas a recuperer.
Partager