Генерация кода Java JPA

Я специально ищу технику генерации кода JPA

Во-первых, что все проект может создать JPA-совместимый код? (Например, HibernateTools)

Во-вторых, я также хотел бы настроить утилиту генерации кода, поскольку она должна соответствовать нашим корпоративным стандартам.

Если нет, то какова вся инфраструктура, доступная для генерации java-кода с использованием отражения? поэтому я могу писать с нуля.

Примечание. Я использовал eclipse для генерации кода JPA и многократно рефакторировал его, чтобы сделать его совместимым.

Ответ 1

У меня также возникают трудности с пониманием вопроса, но я постараюсь перефразировать:

  • У вас много данных в БД и вы хотите получить к нему доступ через JPA
  • Вы не хотите вручную писать классы для доступа к различным БД/таблицам
  • В настоящее время все/большинство ваших классов моделей создаются из Eclipse
  • Эти модели содержат аннотации JPA
  • Классы моделей (или аннотации) не соответствуют корпоративным стандартам

Когда вы говорите "генерация java-кода JPA", я понимаю, что генерирует аннотированные классы классов JPA из поставляемого DB-соединения. Большинство фреймворков часто ссылаются на это как на обратную инженерию.

Теперь у вас есть два вопроса:

  • Какие генераторы кода могут быть рекомендованы для создания аннотированных классов JPA?
  • Можно ли настроить вывод этих фреймворков и каким образом?

Чтобы ответить на первый вопрос:

Мне очень нравится генерация кода Netbeans, особенно если вы показываете результаты тем, кто не знаком с JPA.

На уровне настройки я могу поделиться опытом, который у меня был с Hibernate Tools. Особенно для воспроизводимых результатов, попробуйте использовать ant -ограниченные задачи. Вы можете легко добавить некоторые цели в свою сборку, а генерация кода может быть выполнена на двух уровнях:

С помощью шаблонов вы сможете охватить большинство корпоративных стандартов. Загляните в каталог pojo пакета hibernate-tools. Самый простой способ настроить генерацию кода - скопировать и адаптировать шаблоны и поставить их перед hibernate-tools.jar в задачу ant, используемую для создания pojos.

Как уже указывалось в другом комментарии, впоследствии может быть сложно изменить сгенерированный код. Надеюсь, следующие советы помогут вам:

  • Попробуйте отделить созданные и настроенные исходные файлы в разных папках.
  • Подумайте об использовании @MappedSuperclass для классов, которые вы можете захотеть адаптировать вручную.

Ответ 2

Другим эффективным решением для генерации кода JPA является Инструменты Telosys "

Плагин Eclipse, работающий из существующей базы данных (подход "база данных" ) с настраиваемыми шаблонами. Это решение является более гибким, чем Dali благодаря своей облегченной модели и шаблонам Velocity (общий доступ к GitHub).

См. веб-сайт: https://sites.google.com/site/telosystools/

Плагин на Eclipse Marketplace: http://marketplace.eclipse.org/content/telosys-tools

Краткое описание принципа: http://labs.sogeti.com/code-generation-can-it-be-simple-and-pragmatic/

Для поколения JPA используйте шаблоны JPA, доступные на GitHub: https://github.com/telosys-tools-community/jpa-templates-TT205

Ответ 3

Я использовал Dali Persistence Eclipse Plugin, инструмент доступен для загрузки через сайт обновления Indigo Java EE SR1.

После установки плагина, чтобы сделать обратную разработку вашей БД, вам необходимо создать новый проект JPA, установить соединение с базой данных, запустить автоматическую загрузку времени выполнения JPA (в моем случае Eclipse Link), а затем запустить генерацию обработать.

В процессе генерации кода вам предлагается предоставить сведения о сопоставлениях таблиц и сгенерированных классах. В конце генерации код чист.

Ответ 4

Minuteproject является инструментом генератора и может генерировать JPA1/JPA2, а также артефакты, напоминающие ORM-подобные гибернации. Он основан на обратном проектировании из базы данных. Вы можете поручить генератору применить соглашение для вашего java-кода, который не соответствует вашему соглашению с БД, но отображение будет правильным. (Примерный префикс имени базы данных таблицы, таблица, начинающаяся с ADMIN_, такая как ADMIN_ENVIRONMENT, является средой (без администратора) как класс java) На данный момент 20+ соглашений, которые помогут вам изменить вашу модель на меньшую глубину взгляда DB на большее количество Java-OO-friendly.

Еще одна интересная особенность - обновляемый код, позволяющий изменять как сгенерированный код, так и вашу модель И. aht next ваши модификации будут сохранены! Генератор делает слияние.

Шаблоны с открытым исходным кодом и работают со скоростью, "довольно" легко добавить трек, чтобы сделать конкретным для вашей среды (например, аспекты безопасности..., которые имеют отношение к вашей организации). Вы можете разместить свой шаблон на уровне поля, сущности (таблицы или представления), пакета (группы сущностей), модели, приложения, обеспечивающего гибкость, а так как шаблон дорожки знает друг друга через метаданные, довольно легко ссылаться на другие шаблонов и связать их по конфигурации с помощью соглашения об именах.

Ответ 5

Проект lombok, похоже, позволяет генерировать базовые именованные запросы, это еще один подход с использованием аннотаций и генерации кода во время компиляции.

См:

Парень из форума спящего режима, похоже, использует традиционный подход генерации кода с помощью Hibernate Tools: https://forum.hibernate.org/viewtopic.php?f=9&t=962223&p=2315766&hilit=named+queries+generate#p2315766

Я согласен с cletus о том, что вы не можете генерировать все именованные запросы, но я думаю, мы можем представить генерацию базовых именованных запросов такими искателями на основе одного или нескольких полей объекта.

Ответ 6

проверить JPM2java, его генератор кода для JPA. Единственный улов в том, что он не создает код JPA из файлов или таблицы SQL, вам нужен файл orm.xml. Если вы ищете инструмент для генерации кода непосредственно из таблиц, вы можете попробовать Netbeans. Он имеет опции для генерации кода JPA непосредственно из таблиц

Ответ 7

Идеальный инструмент/плагин eclipse для обратного поколения кода jpa - это Hibernate Tools. Теперь это стало частью JBoss Tools. Итак, в своем затмении начинайте с установки JBoss Tools.

Затем создайте проект JPA. Этот проект будет действовать как владелец всех ваших кодов/конфигураций, связанных с проектом обратной генерации. Установка JBoss Tools сначала дает вам преимущество в том, что ваша конфигурация Hibernate (часть Hibernate Tools) создается вместе с вашим проектом JPA.

Следующим шагом будет использование Hibernate Tools для фактического обратного создания объектов JPA POJO, соответствующих вашим таблицам базы данных.

Чтобы подробно разобраться в обратном генерации JPA POJO, вы можете посмотреть следующий учебник... http://www.javabrahman.com/j2ee/how-to-do-reverse-code-generation-of-hibernatejpa-pojo-entities-using-jboss-tools-eclipse-plugin/

В приведенном выше учебнике также есть ссылки на учебные пособия для создания проекта JPA, а также для установки JBoss Tools в вашей установке eclipse, оба из которых являются предпосылками для восстановления JPA POJO-объектов.

Ответ 8

Графический инструмент с открытым исходным кодом для создания класса JPA, визуализации и изменения базы данных, обратного проектирования, выходящего из исходного кода и импортирующих моделей из существующей базы данных.

Для NetBeans: http://jpamodeler.github.io/
Для Eclipse: https://www.eclipse.org/webtools/dali/

Ответ 9

Пожалуйста, посмотрите на JOOQ.

http://www.jooq.org/

Доступен открытый источник.....

Ответ 10

Хорошо, в основном у вас есть вещи неправильным способом: JPA is the generation tool.

Я говорю это, потому что единственное, что вы могли бы создать сущности JPA, это SQL, и весь смысл JPA - это делать все наоборот. Сначала вы определяете свою модель объекта, и из этого вы можете создавать свои таблицы и запросы.

Например, я видел, что проекты используют Hibernate для определения своих сущностей, а затем они имеют конструкцию ant build script, которая создает базу данных из модели сущности Hibernate.

Определения сущностей JPA, особенно с аннотациями, не являются абсолютно обременительными. Они действительно ваш лучший вариант, как первое, что нужно сделать, а не быть продуктом чего-то другого.

Кроме того, другой инструмент не поможет вам писать именованные запросы, определять правильные параметры каскада в отношениях и т.д. И если у вас был сгенерированный код, как бы вы отредактировали его после этого?

Это просто не правильный путь.