H

Hibernate_ORM_H2_Database

Демонстрационный проект Hibernate ORM & H2 Database (Portable)

Портативный, автономный Java-проект, демонстрирующий базовые CRUD-операции (создание, чтение, обновление, удаление) с использованием фреймворка Hibernate 6 и встроенной файловой СУБД H2.

Проект полностью автономен, инкапсулирован внутри одной директории и настроен для бесперебойной работы с USB-флешки на любом ПК с Windows 10 в условиях строгого отсутствия интернета (офлайн-режим).


📂 Архитектура и структура папок

Проект жестко привязан к следующей переносимой структуре каталогов на диске:

C:\Java\
├── VSCode-Portable\             # Портативное окружение разработки
│   ├── jdk-25.0.2\              # Среда выполнения Java 25
│   ├── settings.xml             # Глобальная конфигурация Maven
│   └── maven_repository\        # Локальный офлайн-репозиторий .jar библиотек
└── prog\
    └── hibernate\               # Корневая папка проекта
        ├── .vscode\
        │   └── settings.json    # Офлайн-настройки интеграции VS Code c JDK
        ├── src\main\java\
        │   └── Main.java        # Единственный Java-класс (Сущность + Логика CRUD)
        ├── db\                  # Директория с физическими файлами базы данных H2
        │   └── demo.mv.db       # Постоянное хранилище таблиц СУБД
        ├── pom.xml              # Конфигурация сборщика Maven с комментариями
        └── run.bat              # Скрипт автоматической компиляции и запуска в 1 клик

🛠️ Технологический стек и синхронизация

Проект успешно решает скрытые конфликты безопасности современных версий Java и транзитивных зависимостей:

  • Java 25 (JDK) — целевая среда выполнения.
  • Hibernate Core 6.6.8.Final — ORM-движок автоматического связывания объектов и таблиц.
  • Hibernate Commons Annotations — модуль разбора JPA-метаданных (интегрирован для версии 6.6.8+).
  • H2 Database 2.3.232 — встроенная файловая СУБД (работает без установки серверов).
  • JBoss Logging 3.5.0.Final — изолированная версия логгера, полностью совместимая с системой модульной безопасности JDK 25.
  • ANTLR 4.13 — математический парсер для безошибочной трансляции объектных HQL-запросов в нативный SQL СУБД H2.

🚀 Варианты запуска проекта

Вариант 1. Через VS Code (По кнопке Play)

  1. Откройте папку C:\Java\prog\hibernate\ в VS Code.
  2. Файл .vscode/settings.json автоматически заблокирует фоновую сетевую активность ("java.autobuild.enabled": false) и переведет среду в офлайн.
  3. Откройте файл Main.java и нажмите стандартную кнопку Play (треугольник) в верхнем правом углу.

Вариант 2. Автономный запуск через консоль Windows

  1. Закройте VS Code и перейдите в корень проекта.
  2. Дважды кликните по файлу run.bat.
  3. Скрипт в автоматическом режиме:
    • Выполнит офлайн-компиляцию через Maven (mvn clean compile -o).
    • Через поисковые циклы for /r соберет динамический Classpath, исключая конфликты старых дубликатов библиотек.
    • Нативно запустит приложение напрямую через java.exe.

🔎 Демонстрируемый CRUD-функционал (Суть ORM)

Вся логика сосредоточена в методе main класса Main.java и разделена на 4 изолированные сессии (транзакции):

  1. CREATE (Сохранение): Создание Java-объектов User в оперативной памяти и их запись в БД через session.persist(). На основе JPA-аннотаций Hibernate сам генерирует SQL-команды CREATE TABLE и INSERT INTO.
  2. UPDATE (Обновление): Демонстрация механизма Dirty Checking. Изменение имени пользователя происходит через обычный Java-сеттер setName(). При коммите транзакции Hibernate автоматически формирует и отправляет SQL-запрос UPDATE.
  3. READ LIST (Чтение HQL): Выполнение объектного поискового запроса на языке HQL (from User where name like :searchName). Запрос транслируется в безопасный SELECT с защитой от SQL-инъекций.
  4. DELETE (Удаление): Поиск записи по динамическому идентификатору (полученному из автоинкремента базы данных на шаге 1) и её физическое удаление методом session.remove().

💾 Физическая проверка данных в СУБД H2

После выполнения CRUD-операций программа встает на паузу, удерживая соединение. Вы можете лично проверить, как данные записались в файл db/demo.mv.db:

  1. Не закрывая консоль программы, откройте любой браузер и перейдите по адресу: http://localhost:8082.
  2. В окне H2 Console настройте следующие параметры подключения:
    • JDBC URL: jdbc:h2:file:C:/Java/prog\hibernate/db/demo;DB_CLOSE_DELAY=-1
    • User Name: sa
    • Password: (полностью очистить поле, пароль пустой)
  3. Нажмите Connect.
  4. Выберите таблицу USERS и нажмите кнопку Run. На экране отобразится актуальная таблица со всеми сохраненными пользователями.
  5. Перед закрытием окна нажмите кнопку Disconnect в левом верхнем углу СУБД, вернитесь в консоль Java и нажмите Enter для безопасного освобождения ресурсов.