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

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

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

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

Если нет, то каковы все рамки, доступные для генерации кода java с помощью отражения? чтобы я мог писать с нуля.

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

10 ответов


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

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

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

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

  1. какие генераторы кода можно рекомендовать для создания аннотированных классов JPA?
  2. можно ли настроить выходные данные этих фреймворков и каким образом?

ответить на первый вопрос:--3-->

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

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

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

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

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

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

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

см. На веб-сайте : http://www.telosys.org/

плагин на 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-templates-v3


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

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

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


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

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

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


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

посмотреть:

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

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


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


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

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

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

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

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


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

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


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

http://www.jooq.org/

доступен с открытым исходным кодом .....


хорошо, в основном у вас все не так:JPA is the generation tool.

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

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

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

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

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