Найти в Дзене
Покупайте СтеллыИ дарите их за контент
1 день назад

Spring Boot: optimistic locking через `@Version

` В JPA/Hibernate можно ловить конфликт обновлений без блокировки строки в базе. Достаточно добавить поле версии: @Entity public class Account { @Id private Long id; private BigDecimal balance; @Version private Long version; } Как это работает: Когда Entity читается из базы, Hibernate забирает текущую версию записи. Например, version = 2. При обновлении он делает update с проверкой этой версии. Если за это время другая транзакция уже изменила запись, версия в базе стала другой. Тогда update не затронет ни одной строки, и Hibernate выбросит OptimisticLockException...

3 дня назад

Google снова поделилась внутренней магией

Компания выложила Copybara — инструмент, который годами помогал ей синхронизировать код между разными репозиториями. Допустим у вас есть закрытый корпоративный репозиторий и публичная open-source версия. Copybara помогает держать их в актуальном состоянии без ручного копирования, костылей и бесконечных cherry-pick’ов...

3 дня назад

🖥 В Java длинные цепочки вроде `user → address → city` легко превращаются в ловушку для `NullPointerException

`. Обычный вариант быстро разрастается: User user = userRepository.findByEmail(email); if (user != null) { Address address = user.getAddress(); if (address != null) { return address.getCity(); } } return "unknown"; Проблема не только в количестве строк. В таких вложенных if легко забыть один уровень проверки и получить NPE в самом неожиданном месте. С Optional это можно записать короче и безопаснее: return userRepository.findByEmail(email) .map(User::getAddress) .map(Address::getCity) ...

5 дней назад

🖥 Java Records: меньше boilerplate для data-классов

Начиная с Java 14 появились record - короткий способ описывать неизменяемые объекты для хранения данных. Вместо обычного POJO с полями, конструктором, getters, equals(), hashCode() и toString() можно написать одну строку: public record Point(int x, int y) {} И Java сама сгенерирует всё базовое: Point p = new Point(3, 4); int x = p...

6 дней назад

В Java для enum лучше часто брать не HashSet, а EnumSet

EnumSet - это специальная реализация Set, заточенная именно под enum-значения. Фишка в том, что внутри он хранит элементы не как обычные объекты в hash-таблице, а как битовую маску. Каждое значение enum получает свой бит: enum Permission { READ, WRITE, DELETE } Если в наборе есть READ и WRITE, внутри это может быть просто несколько включённых битов. Из-за этого операции вроде contains, add, remove, union, intersection работают очень быстро и занимают меньше памяти...

1 неделя назад

Java-совет: начиная с Java 8 лучше использовать java.time, а не старые Date и Calendar

Почему? Calendar легко использовать неправильно: cal.set(2026, 5, 31); Выглядит как май, но это июнь, потому что месяцы там считаются с нуля. Ещё проблема: Date и Calendar изменяемые, а SimpleDateFormat не thread-safe. Нормальный вариант: LocalDate today = LocalDate.of(2026, 5, 31); LocalDate deadline = today.plusDays(7); Тут всё читается буквально: 5 — это май, дата immutable, форматирование безопаснее и понятнее...

Покупайте СтеллыИ дарите их за контент