Generowanie kodu java JPA

Szukam techniki generowania kodu JPA

Po pierwsze, jakie projekty mogą wygenerować kod zgodny z JPA? (Np. HibernateTools)

Po drugie, chciałbym również dostosować narzędzie do generowania kodu, ponieważ musi być zgodne z naszymi standardami korporacyjnymi.

Jeśli nie, to jakie są dostępne frameworki do generowania kodu Javy przy użyciu reflection? żebym mógł pisać od podstaw.

Uwaga: użyłem eclipse do wygenerowania kodu JPA i refaktoringu wielokrotnie, aby było zgodne.

Author: Mohan, 2009-01-17

10 answers

Ja też mam trudności ze zrozumieniem pytania, ale postaram się sformułować inaczej:

  • masz dużo danych w DB i chcesz uzyskać do nich dostęp przez JPA
  • nie chcesz ręcznie pisać klas, aby uzyskać dostęp do różnych DBs/tabel
  • obecnie wszystkie/większość klas modeli są generowane z poziomu Eclipse
  • te modele mają adnotacje JPA
  • klasy modeli (lub adnotacje) nie są zgodne ze standardami korporacyjnymi

Kiedy powiedzmy "JPA Java code generation", Rozumiem generowanie klas modeli z adnotacjami JPA z dostarczonego połączenia DB. Większość frameworków często określa to mianem inżynierii odwrotnej.

Teraz masz dwa pytania:

  1. jakie generatory kodu można polecić do generowania klas z adnotacją JPA?
  2. czy jest możliwe dostosowanie wyjścia tych frameworków i w jaki sposób?
Odpowiedź na pierwsze pytanie:

Bardzo lubię generowanie kodu Netbeans, szczególnie jeśli pokażesz wyniki komuś, kto nie zna JPA.

Na poziomie dostosowywania mogę podzielić się tylko tym, co miałem z narzędziami Hibernate. Szczególnie dla powtarzalnych wyników, spróbuj użyć zadań ant-based . Możesz łatwo dodać kilka celów do swojej kompilacji i kodu generowanie może odbywać się na dwóch poziomach:

Dzięki szablonom powinieneś być w stanie pokryć większość standardów korporacyjnych. Zajrzyj do katalogu pojo pakietu Hibernate-tools. Najprostszym sposobem na dostosowanie generowania kodu jest skopiowanie i dostosowanie szablonów i umieszczenie ich przed hibernate-tools.słoik w zadaniu mrówka używany do tworzenia pojos.

Jak już wspomniano w innym komentarzu, może być trudno zmodyfikować wygenerowany kod później. Mam nadzieję, że poniższe wskazówki mogą Ci pomóc:

  • spróbuj rozdzielić wygenerowane i dostosowane pliki źródłowe w różnych folderach.
  • pomyśl o użyciu @MappedSuperclass dla klas, które możesz dostosować w kroku manualnym.
 22
Author: Kariem,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-29 17:53:15

Kolejnym efektywnym rozwiązaniem do generowania kodu JPA jest "Telosys Tools "

Wtyczka Eclipse pracująca z istniejącą bazą danych (podejście "database firts") z konfigurowalnymi szablonami. To rozwiązanie jest bardziej elastyczne niż Dali dzięki lekkiemu modelowi i szablonom prędkości (udostępnionym na GitHub)

Zobacz stronę: http://www.telosys.org/

Plugin Na Eclipse Marketplace : http://marketplace.eclipse.org/content/telosys-tools

Krótki opis zasady: http://labs.sogeti.com/code-generation-can-it-be-simple-and-pragmatic/

Do generowania JPA użyj szablonów JPA dostępnych na Githubie : https://github.com/telosys-templates-v3

 5
Author: lgu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-22 13:03:02

Użyłem Dali Persistence Eclipse Plugin , Narzędzie jest dostępne do pobrania za pośrednictwem Indigo Java EE SR1 update site.

Po zainstalowaniu wtyczki, aby dokonać inżynierii odwrotnej DB, należy utworzyć nowy projekt JPA, ustawić połączenie z bazą danych, uruchomić automatyczne pobieranie JPA runtime( w moim przypadku Eclipse Link), a następnie rozpocząć proces generowania.

Podczas procesu generowania kodu zostaniesz poproszony o podanie szczegółów mapowania tabeli i generowanych klas. Pod koniec generacji kod jest czysty.

 3
Author: psuzzi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-08 16:12:45

Minuteproject jest narzędziem generującym i może generować JPA1/ JPA2 , jak również hibernować artefakty podobne do ORM. Opiera się na inżynierii odwrotnej z bazy danych. Możesz polecić generatorowi stosowanie konwencji dla kodu java, który nie jest zgodny z konwencją DB, ale mapowanie będzie poprawne. (Przykładowy prefiks nazwy dB; tabela zaczynająca się od ADMIN_, np. ADMIN_ENVIRONMENT to Environment (w/out Admin) jako klasa java) Na razie jest [[5]] 20+ konwencje , które pomagają przekształcić model w mniej DB look-and-feel przez bardziej przyjazne dla Javy.

Kolejną ciekawą funkcją jest updatable-codeumożliwiający modyfikację zarówno wygenerowanego kodu, jak i modelu iAHT następnej generacji Twoje modyfikacje zostaną zachowane! generator dokonuje połączenia.

Szablony są opensource i działają z prędkością, jest "dość" łatwo dołączyć ścieżkę, aby stworzyć konkretną dla Twojego frameworka (np. aspekty... które są istotne dla Twojej organizacji). Szablon można skalować do poziomu pola, encji (tabeli lub widoku), pakietu (grupy encji), modelu, aplikacji zapewniającej elastyczność, a ponieważ szablon ścieżki zna się nawzajem za pomocą metadanych, jest dość łatwy do odwołania z innych szablonów i powiązania ich przez konfigurację z konwencją nazewnictwa.

 2
Author: xflorian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-29 17:30:53

Projekt Lombok wydaje się pozwalający na generowanie podstawowych zapytań nazwanych, jest to kolejne podejście wykorzystujące adnotacje i generowanie kodu w czasie kompilacji.

Zobacz:

Facet na forum hibernate wydaje się używać tradycyjnego podejścia do generowania kodu Z Narzędziami Hibernate : https://forum.hibernate.org/viewtopic.php?f=9&t=962223&p=2315766&hilit=named+queries+generate#p2315766

Zgadzam się z cletusem co do tego, że nie można wygenerować wszystkich zapytań nazwanych, ale myślę, że możemy sobie wyobrazić generowanie podstawowych zapytań nazwanych takich finderów na podstawie jednego lub kilku pól obiektu.

 1
Author: snowflake,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-14 10:29:39

Sprawdź JPM2java , to generator kodu dla JPA. Jedynym haczykiem jest to, że nie generuje kodu JPA z plików SQL lub tabeli, potrzebujesz orm.plik xml. Jeśli szukasz narzędzia do generowania kodu bezpośrednio z tabel, wypróbuj Netbeans. Posiada opcje generowania kodu JPA bezpośrednio z tabel

 0
Author: 2 revs, 2 users 86%Rajesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-24 11:46:31

Idealną wtyczką tool / eclipse do odwrotnego generowania kodu jpa są narzędzia Hibernate. Obecnie jest to część JBoss Tools. Tak więc w Twoim eclipse zacznij od instalacji narzędzi JBoss.

Następnie utwórz projekt JPA. Ten projekt będzie działał jako posiadacz wszystkich kodu / konfiguracji związanych z projektem reverse generation. Najpierw zainstalowanie JBoss Tools daje Ci przewagę, że konfiguracja Hibernate(część Hibernate Tools) zostanie utworzona wraz z Twoim JPA projekt.

Następnym krokiem będzie użycie narzędzi Hibernate do odwrócenia generowania encji JPA POJO odpowiadających tabelom bazy danych.

Aby szczegółowo zrozumieć kroki dla JPA POJO reverse generation, możesz spojrzeć na następujące kroki tutorial...http://www.javabrahman.com/j2ee/how-to-do-reverse-code-generation-of-hibernatejpa-pojo-entities-using-jboss-tools-eclipse-plugin/

Powyższy tutorial zawiera również linki do samouczków do tworzenia JPA Projekt, a także do instalacji JBoss Tools w instalacji eclipse, które są warunkiem wstępnym dla JPA POJO entities reverse code generation.

 0
Author: Frank,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-01 15:30:16

Open source graficzne narzędzie do generowania klasy JPA, wizualizacji i modyfikacji bazy danych, inżynierii wstecznej kodu źródłowego i importu modeli z istniejącej bazy danych.

Dla NetBeans: http://jpamodeler.github.io/
Zaćmienie: https://www.eclipse.org/webtools/dali/

 0
Author: jGauravGupta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-15 05:22:38

Proszę spojrzeć na JOOQ.

Http://www.jooq.org/

Open Source jest dostępny .....

 -1
Author: Shineed Basheer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-23 11:13:26

Ok, w zasadzie masz rzeczy źle arond: JPA is the generation tool.

Mówię tak, ponieważ jedyną rzeczą, z której można wygenerować encje JPA, jest SQL, a celem JPA jest robienie rzeczy na odwrót. Najpierw definiujesz swój model obiektowy, a następnie generujesz tabele i zapytania.

Na przykład, widziałem projekty używają Hibernate do definiowania swoich encji, a następnie mają skrypt Ant build, który tworzy bazę danych z encji Hibernate model.

Definicje encji JPA - zwłaszcza z adnotacjami-nie są zbyt uciążliwe. Naprawdę są najlepszym rozwiązaniem jako pierwsza rzecz do zrobienia, a nie jest produktem czegoś innego.

Poza tym inne narzędzie nie pomoże Ci w pisaniu zapytań nazwanych, zdefiniowaniu prawidłowych opcji kaskadowych na relacjach itp. A gdybyś wygenerował Kod, jak poradziłbyś sobie z jego późniejszą modyfikacją?

To nie jest właściwa droga.
 -4
Author: cletus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-17 02:08:29