Мы выпустили JPA Buddy 3.0! В этом релизе наконец-то появилась генерация скриптов для Flyway, поддержка Kotlin, а также другие улучшения и исправления. Посмотрим на эти нововведения подробнее.
Для тех, кто не слышал о JPA Buddy: это плагин, который упрощает работу с JPA, Hibernate, Spring Data JPA, Liquibase и подобными технологиями. Подробнее о нем можно почитать в этой статье.
Flyway
Нас часто просили добавить поддержку Flyway, и в этой версии она появилась. Теперь JPA Buddy умеет генерировать скрипты миграции Flyway, сравнивая:
JPA-сущности и базу данных
Две базы данных — текущую и устаревшую
Генерация скриптов путем сравнения модели данных с целевой БД выглядит вот так:
JPA Buddy также поможет вам с именованием файлов миграции. Мы добавили целый ряд настроек, который позволяет максимально гибко указать шаблон именования файлов: префикс миграции, шаблон версии, разделитель и описание. Больше об именовании файла миграции можно узнать в документации Flyway (англ).
Шаблон версии можно выбрать из ряда часто используемых, или же определите свой собственный. Для этого есть следующие макросы:
#date ([format]) – текущая системная дата в указанном SimpleDateFormat
#increment ([start], [step], [decimalFormat]) – число, используемое для сохранения уникальности имени
semVer – семантическая версия проекта
Больше информации о доступных переменных и макросах есть на странице нашего плагина.
Kotlin (альфа-версия)
JPA Buddy наконец–то поддерживает Kotlin! За исключением нескольких инспекций, поддерживается та же функциональность, что и для Java: визуальные дизайнеры для сущностей и репозиториев, генерация equals()/hashCode()/toString(), поддержка JPA конвертеров и Hibernate Custom Types, отображение сущностей в дереве JPA Structure и многое другое.
Например, так можно создать атрибут в Kotlin-сущности с помощью JPA Palette и JPA Inspector:
Для репозиториев поддерживаются как обычные методы, так и методы @Query:
Что важно отметить: Kotlin – очень гибкий язык программирования. Код, который делает одно и то же, можно написать совершенно по-разному. Поэтому программировать на Kotlin – одно удовольствие, а вот разрабатывать для него инструменты не так просто. Мы постарались предусмотреть самые распространенные варианты использования Kotlin в JPA-сущностях и Spring Data репозиториях, но некоторые могли упустить и не протестировать.
Если вы пишете на Kotlin, пожалуйста, сообщайте нам обо всех возникающих ошибках и проблемах. Улучшение работы с Kotlin — наш главный приоритет в следующих минорных релизах.
Асинхронные методы в Spring Data репозитория
Диалоги генерации запросов и JPA Inspector теперь поддерживают создание асинхронных методов в Spring Data репозиториях:
Односторонний OneToMany с JoinColumn
В JPA есть поддержка односторонних ассоциаций OneToMany, то есть ассоциаций, которые определены только в одной из сущностей. Один из способов их задать — аннотировать ассоциацию с помощью @JoinColumn:
@Entity
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID", nullable = false)
private Long id;
@OneToMany
@JoinColumn(name = "CUST_ID") // this column is located in the ORDER_ table
private Collection<Order> orders = new ArrayList<>();
}
Столбец «CUST_ID» создается в таблице «ORDER_», при этом в сущности Order соответствующего атрибута нет:
@Entity
@Table(name = "ORDER_")
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID", nullable = false)
private Long id;
// NOTHING about Customer
}
Теперь JPA Buddy поддерживает создание таких ассоциаций. Для этого в диалоговом окне создания ассоциации нужно установить флажок «Owning side»:
Создание отчетов об ошибках с помощью Sentry
Баги и ошибки неизбежны в любом программном обеспечении, и средства разработки — не исключение. Мы делаем все возможное, чтобы выявить и исправить как можно больше багов, но некоторые из них всё же попадают в релиз. Если вы столкнетесь с ними, пожалуйста, сообщите нам об этом через форму на сайте или в Discord. Это поможет нам сделать JPA Buddy лучше.
Кстати, мы добавили механизм отправки отчетов об исключениях напрямую. Теперь это можно сделать в пару кликов:
Заключение
JPA Buddy продолжает развиваться, в этой статье мы рассмотрели лишь некоторые из улучшений, реализованных в версии 3.0. Многие из реализованных функций были предложены нашим сообществом, и мы призываем вас присоединиться к нам в Discord, чтобы делиться своими идеями и отзывами.