Что нового в JPA Buddy 3.0

a69d4f77ef97e2af4abbdcddb525e293.jpg

Мы выпустили 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 — семантическая версия проекта

c861ab6420fb1fe70ed81520d03c488f.png

Больше информации о доступных переменных и макросах есть на странице нашего плагина.

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 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, чтобы делиться своими идеями и отзывами.

© Habrahabr.ru