Комментарии 3
Понятно, что статья больше для рекламы продукта и пиара компании, но давайте делать примеры с качественным кодом.
Версионирование миграций вида V1__ V2__ сразу же сломается, когда 2 разработчика начнут делать фичи параллельно. Для обхода этого есть подход использовать таймштампа в версии https://www.jeremyjarrell.com/using-flyway-db-with-distributed-version-control/
Генерация портянки кода вида
Class<?> oEffectiveClass = o instanceof HibernateProxy
? ((HibernateProxy) o).getHibernateLazyInitializer()
.getPersistentClass()
: o.getClass();
Class<?> thisEffectiveClass = this instanceof HibernateProxy
? ((HibernateProxy) this).getHibernateLazyInitializer()
.getPersistentClass()
: this.getClass();
if (thisEffectiveClass != oEffectiveClass) return false;
Comment comment = (Comment) o;
видимо пошла из помогаторов вида jpa buddy. Неужели не проще и более читаемо делать проверку на instanceof? У нас классы расширяются cglib-ом через наследование и прокси-класс будет наследником класса entity. Как по мне более читаемо:
if (!(o instanceof Comment comment)) return false;
Непонятно, зачем задано ограничение на строку комментария varchar(255)? Во-первых, почему именно 255? Чем так привлекло это число, почему не varchar(4000)? Во-вторых, для текста в Postgres есть почти безлимитный text.
Еще непонятно, почему для даты используется timestamp without time zone, который по смыслу хранит локальное время LocalDateTime? Если у нас 1 клиент БД с одной TZ, то вроде бы и ок. Но если у нас появится клиент (приложение) в другой TZ, то время будет уже неверным.
В Amplicode можно настроить именование скриптов версионирования, в том числе и ваш вариант.
Действительно, такие equals hashcode пришли из JPA Buddy (https://jpa-buddy.com/blog/hopefully-the-final-article-about-equals-and-hashcode-for-jpa-entities-with-db-generated-ids/), ведь его делала наша команда)
Ограничение 255 не случайно, это дефолт, который использует JPA. Можно конечно его проигнорировать, но лучше, когда модель и бд согласованы, правда? Тем не менее, можно поменять настройки маппинга JPA типов на database типы
Это модельное приложение, для него LocalDateTime вполне достаточен)
@vasyakolobok77 спасибо за развёрнутый комментарий!
Полностью согласен с @alexander-shustanov, лишь дополню:
1) Да, всё это дело настраиваемое и каждый может настроить под свой проект
2) На вашем проекте instanceof подходит, на других не подойдёт. В целом, мы можем посмотреть в сторону того, чтобы дать возможность генерировать несколько реализацией. Но нужно провести анализ и убедиться, что действительно не будет никаких сайд эффектов в случае использования этого подхода. С той реализацией которую мы генерируем, проблем точно не будет, хоть она и может выглядеть как "портянка" :)
По 3 и 4 пунктам добавить нечего.
Flyway + Spring Boot: настройка и написание миграций баз данных