Génération de code java JPA
Je suis spécifiquement à la recherche de la technique de génération de code JPA
Tout d'abord, quels sont tous les projets qui pourraient générer du code compatible JPA? (Eg. HibernateTools)
Deuxièmement, je voudrais également personnaliser l'utilitaire de génération de code, car il doit être conforme à nos normes d'entreprise.
Sinon, quel est tout le framework Disponible pour générer du code java en utilisant la réflexion? donc je peux écrire à partir de zéro.
Note: j'ai utilisé eclipse pour générer du code JPA et le refactoriser à plusieurs reprises pour le rendre conforme.
10 réponses
J'ai aussi des difficultés à comprendre la question, mais je vais essayer de reformuler:
- Vous avez beaucoup de données dans une base de données et souhaitez y accéder via JPA
- vous ne voulez pas écrire manuellement les classes pour accéder aux différentes tables/Bases de données
- actuellement, toutes/la plupart de vos classes de modèle sont générées à partir D'Eclipse
- ces modèles ont des annotations JPA
- Les classes de modèle (ou les annotations) ne sont pas conformes aux normes de l'entreprise
Lorsque vous dites "génération de code java JPA", je comprends la génération de classes de modèles annotées JPA à partir d'une connexion DB fournie. La plupart des cadres se réfèrent souvent à cela comme l'ingénierie inverse.
Maintenant, vous avez deux questions:
- Quels générateurs de code peuvent être recommandés pour générer des classes annotées JPA?
- Est-il possible de personnaliser la sortie de ces cadres, et de quelle manière?
Pour répondre à la première question:
- Outils D'Hibernation - déjà mentionné dans la question, mais je préfère celui-ci
- EclipseLink
- Netbeans
J'aime beaucoup la génération de code Netbeans, surtout si vous montrez les résultats à quelqu'un qui ne connaît pas JPA.
Au niveau de la personnalisation, Je ne peux que partager l'expérience que j'ai eue avec les outils Hibernate. Surtout pour des résultats reproductibles, essayez d'utiliser les tâches basées sur ant . Vous pouvez facilement ajouter des cibles à votre build et à votre code la génération peut se faire à deux niveaux:
- Configurer les exportateurs en utilisant propriétés
- Fournir des modèles personnalisés freemarker
Avec les modèles, vous devriez être en mesure de couvrir la plupart des normes de l'entreprise. Regardez dans le répertoire pojo
du package hibernate-tools. La façon la plus simple de personnaliser la génération de code est de copier et d'adapter les modèles et de les mettre avant les outils hibernate.jar dans la tâche ant utilisée pour créer le pojo.
Comme déjà souligné dans un autre commentaire, il peut être difficile de modifier le code généré par la suite. J'espère que les conseils suivants peuvent vous aider:
- essayez de séparer les fichiers source générés et personnalisés dans différents dossiers.
- pensez à utiliser
@MappedSuperclass
pour les classes que vous voudrez peut-être adapter dans une étape manuelle.
Une autre solution efficace pour la génération de code JPA est "Telosys Tools "
Un plugin Eclipse fonctionnant à partir d'une base de données existante (approche "database firts") avec modèles personnalisables. Cette solution est plus flexible que Dali grâce à son modèle léger et aux modèles Velocity (partagés sur Github)
Voir le site web : http://www.telosys.org/
Le plugin sur Eclipse Marketplace : http://marketplace.eclipse.org/content/telosys-tools
Une brève description du principe : http://labs.sogeti.com/code-generation-can-it-be-simple-and-pragmatic/
Pour la génération JPA , Utilisez les modèles JPA disponibles sur GitHub: https://github.com/telosys-templates-v3
J'ai utilisé le Plugin DALI Persistence Eclipse , L'outil est disponible en téléchargement via le site de mise à jourIndigo Java EE SR1 .
Une fois le plugin installé, pour effectuer une ingénierie inverse de votre base de données, vous devez créer un nouveau projet JPA, définir une connexion à la base de données, lancer le téléchargement automatisé de JPA runtime (dans mon cas Eclipse Link), puis démarrer le processus de génération.
Au cours du processus de génération de code, il vous est demandé de fournir des détails sur les mappages de tables et les classes générées. À la fin de la génération, le code est propre.
Minuteproject est un outil générateur et peut générer JPA1/ JPA2 ainsi que des artefacts de type ORM hibernate. Il est basé sur la rétro-ingénierie de la base de données. Vous pouvez demander au générateur d'appliquer une convention pour votre code java qui ne suit pas votre convention DB, mais le mappage sera correct. (Exemple de préfixe de nom de base de données de bande; table commençant par ADMIN_ tels que ADMIN_ENVIRONMENT sont L'environnement (w/out Admin) en tant que classe java) Pour le moment, il y a 20+ conventions qui vous aident à remodeler votre modèle pour être moins look-and-feel DB par Plus Java-oo-friendly.
Une autre caractéristique intéressante est updatable-code permettant de modifier à la fois le code généré et votre modèle et aht la prochaine génération vos modifications seront conservées!{[12] } le générateur effectue la fusion.
Les modèles sont opensource et de travailler avec la vitesse, il est "assez" facile d'ajouter une piste spécifique pour votre cadre (ex-sécurité aspect... qui correspondent à votre organisation). Vous pouvez étendre votre modèle au niveau du champ, entité (table ou vue), package (groupe d'entités), Modèle, application offrant une flexibilité, et puisque le modèle d'une piste se connaît via des métadonnées, il est assez facile de référencer d'autres modèles et de les associer par configuration avec la convention de nommage.
Le projet lombok semble vous permettre de générer des requêtes nommées de base, c'est une autre approche utilisant des annotations et la génération de code au moment de la compilation.
Voir:
- http://groups.google.com/group/project-lombok/browse_thread/thread/a8c01b2226c081cb
- http://projectlombok.org
Un Gars sur le forum hibernate semble utiliser une approche traditionnelle de génération de code avec les outils Hibernate : https://forum.hibernate.org/viewtopic.php?f=9&t=962223&p=2315766&hilit=named+queries+generate#p2315766
Je suis d'accord avec cletus sur le point que vous ne pouvez pas générer toutes les requêtes nommées, mais je suppose que nous pouvons imaginer générer des requêtes nommées de base de tels finders basés sur un ou plusieurs champs de l'objet.
Consultez JPM2java , C'est un générateur de code pour JPA. Le seul hic est qu'il ne génère pas de code JPA à partir de fichiers SQL ou d'une table, vous auriez besoin d'un orm.fichier xml. Si vous cherchez un outil pour générer du code directement à partir de tables, vous pouvez essayer Netbeans. Il a des options pour générer du code JPA directement à partir des tables
Le plugin outil / eclipse idéal pour la génération inverse de code jpa est Hibernate Tools. Cela a maintenant été fait partie des outils JBoss. Donc, dans votre eclipse, commencez par installer les outils JBoss.
Ensuite, créez un projet JPA. Ce projet agira en tant que titulaire de tous vos codes/configurations liés au projet de génération inverse. L'installation des outils JBoss vous donne d'abord l'avantage que votre Configuration Hibernate (partie des outils Hibernate) est créée avec votre JPA projet.
L'étape suivante consisterait à utiliser les outils Hibernate pour inverser la génération de vos entités POJO JPA correspondant à vos tables de base de données.
Pour comprendre les étapes pour JPA POJO reverse generation en détail, vous pouvez jeter un oeil à ce qui suit tutorial...http://www.javabrahman.com/j2ee/how-to-do-reverse-code-generation-of-hibernatejpa-pojo-entities-using-jboss-tools-eclipse-plugin/
Le tutoriel ci-dessus a également des liens vers des tutoriels pour créer un JPA Projet et également pour l'installation des outils JBoss dans votre installation eclipse, qui sont tous deux des pré-requis pour la génération de code inverse des entités JPA POJO.
Outil graphique Open source pour générer une classe JPA, visualiser et modifier la base de données, rétro-ingénierie sortant du code source et importer des modèles à partir de la base de données existante.
Pour NetBeans : http://jpamodeler.github.io/
Pour Eclipse : https://www.eclipse.org/webtools/dali/
OK, fondamentalement, vous avez des choses dans le mauvais sens: JPA is the generation tool
.
Je dis cela parce que la seule chose à partir de laquelle vous pouvez générer des entités JPA est SQL et le but de JPA est de faire les choses dans l'autre sens. Vous définissez d'abord votre modèle d'objet et, à partir de cela, vous pouvez générer vos tables et vos requêtes.
Par exemple, j'ai vu des projets utiliser Hibernate pour définir leurs entités, puis ils ont un script de construction ant qui crée la base de données à partir de L'entité Hibernate modèle.
Les définitions d'entité JPA-en particulier avec les annotations-ne sont pas exactement onéreuses. Ils sont vraiment votre meilleure option comme la première chose à faire plutôt que d'être le produit d'autre chose.
En outre, un autre outil ne vous aidera pas à écrire des requêtes nommées, à définir les options de cascade correctes sur les relations,etc. Et si vous aviez généré du code, comment le modifieriez-vous par la suite?
Ce n'est tout simplement pas la bonne façon d'aller.