Может кому пригодится ещё, потому что достаточно неочевидное поведение и нигде не объясняется.
Исходные данные:
Я только начинаю знакомство с java и решил использовать Java SE8, Hibernate 5.1, JPA для небольшого десктоп-приложения.
Задача:
Сгенерировать схему базы данных из аннотированных entity-классов, используя SchemaExport из командной строки.
Проблема:
SchemaExport не поддерживает пока аннотированные entity-классы из коробки, он ждёт старые *.hbm.xml файлы мапинга.
Объяснение:
Команда имеет простой синтаксис
java -cp hibernate_classpaths org.hibernate.tool.hbm2ddl.SchemaExport options mapping_files
Все варианты
options можно посмотреть в классе
org.hibernate.tool.hbm2ddl.SchemaExport строки с 499 по 551. Там всё понятно.
Если используете hibernate.cfg.xml, то можете этот файл указать в опции --config.
mapping_files ожидает либо jar-файлы, либо *.hbm.xml-файлы мапинга. Я сперва думал, что если передать jar, то он в нём найдет аннотируемые entity-классы и увидит их, но не тут-то было. В jar-архивах он перебирает все файлы и ищет среди них *.hbm.xml-файлы мапинга. Какой-то замкнутый круг ...
Решение:Тут я выложил небольшой пример кода, который подсвечивает строку, добавляющую аннотированный entity-класс. Для этого entity-класса будет сгенерирован запрос.
Внимание!
Данный класс HibernateUtil является просто небольшим примером. Он только генерирует SQL-команды и вставляет их в файл init.sql.
Можете сделать класс-обертку для SchemaExport, чтобы иметь все его возможности, только придумать какой-то вариант, чтобы добавлять аннотированные entity-классы. Хотя, если меня попросят, то и я могу такой класс написать, это вообще не сложно.
Core-team говорят, что им сейчас некогда заниматься tools для hibernate, поэтому не известно сколько ждать от них этой правки.
Прям целая статья получилась, надеюсь кому-то она будет полезной.