Java for Beginner
685 subscribers
584 photos
161 videos
12 files
898 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔3
@OptimisticLock в Hibernate

Аннотация @OptimisticLock управляет оптимистичной блокировкой сущности в Hibernate, определяя, какие поля должны проверяться на изменение при обновлении.

Пакет: org.hibernate.annotations

Применяется к: классу сущности (@Entity) или отдельным полям.

Стратегии:
OptimisticLockType.VERSION (по умолчанию) — использует @Version.
OptimisticLockType.ALL — проверяет все поля.
OptimisticLockType.DIRTY — проверяет только измененные поля.
OptimisticLockType.NONE — отключает проверку.


Параметры и настройки

Атрибуты
type: Стратегия проверки изменений (VERSION, ALL, DIRTY, NONE).
excluded: Если true, поле исключается из проверки (при type = ALL/DIRTY).


Примеры
@Entity  
@OptimisticLock(type = OptimisticLockType.ALL)
public class Account {
@Id
private Long id;

@OptimisticLock(excluded = true) // Не проверяется при обновлении
private String secretCode;
}


Жизненный цикл и обработка

Как работает оптимистичная блокировка?
При чтении сущности:
Hibernate запоминает состояние полей (для ALL/DIRTY).

При обновлении:
Генерируется SQL вида:
UPDATE account SET ... WHERE id = ? AND (secretCode IS NULL OR secretCode = ?)  


Если условие не выполняется (данные изменились), выбрасывается OptimisticLockException.

Интеграция с Spring Boot

Глобальная стратегия:
spring.jpa.properties.hibernate.optimistic_lock.strategy=all  


Обработка исключений:
@ExceptionHandler(OptimisticLockException.class)  
public void handleConflict() { /* ... */ }


Примеры использования

Пример 1: Проверка всех полей
@Entity  
@OptimisticLock(type = OptimisticLockType.ALL)
public class Product {
@Version
private Long version; // Дополнительная проверка
}


Пример 2: Исключение поля
@Entity  
@OptimisticLock(type = OptimisticLockType.DIRTY)
public class User {
@OptimisticLock(excluded = true)
private LocalDateTime lastLogin;
}


Проблемы

ALL/DIRTY: Требуют хранения исходного состояния (память).
Нет поддержки в JPA: Только Hibernate.


Когда использовать?

VERSION — для большинства случаев.
DIRTY — для больших сущностей с редкими конфликтами.


#Java #Training #Hard #Spring #Hibernate #OptimisticLock
👍2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁2🤣1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
This media is not supported in your browser
VIEW IN TELEGRAM
Всем привет!✌️

Сегодня в 16:00 по МСК, я предлагаю вновь встретиться в Яндекс.Телемост!

Сегодня я хочу рассказать Вам о классах Pageable, Specification и немного о Criteria API.

Узнаем, для чего нам пагинация, фильтрация и как это работает под капотом.

Жду всех! 👍
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2😁1
This media is not supported in your browser
VIEW IN TELEGRAM
А потом ты становишься тимлидом и отрываешься😂

https://t.me/Java_for_beginner_dev

#Mems
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1😁1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Пагинация и фильтрация средствами JAVA.

Встреча от 20.04.2025

Запись встречи -
YOUTUBE
RUTUBE

На сегодняшней встрече мы разобрали такую немаловажную и довольно часто встречающуюся тему как пагинация и фильтрация средствами JAVA.

Что мы узнали:
➡️ Что такое пагинация и зачем она нужна.
➡️ Как реализованы интерфейсы Pageable и Specification.
➡️ Рассмотрели способы реализации пагинации и фильтрации.
➡️ Написали небольшой проект, где все это пощупали руками.

Максимально подробно все реализовано в GitHub -
https://github.com/Oleborn/ReserchPagebleAndSpecification

Смотрите, комментируйте, задавайте вопросы! Обязательно подписывайтесь на ютуб и рутюб каналы!!!

Всем кто пришел и помогал вопросами, моя большая благодарность! 🤙
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍11
📌 Факт дня:

А вы знали, что первый поисковик назывался Archie?

В 1990 году был создан Archie — первый поисковый инструмент в интернете. Он индексировал FTP-архивы, позволяя искать файлы, и стал предшественником современных поисковиков, таких как Google.


proof

#facts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
📌 Цитата дня: Брюс Шнайер

"Безопасность — это процесс, а не продукт."


Брюс Шнайер, эксперт по криптографии, сказал это в 2000 году в статье для журнала Information Security.

Почитать короткую биографию
И о его работах

#Citation #Biography
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Record классы в Java

Record классы в Java — это специальный вид классов, введенный в Java 16 (JEP 395) как финальная фича после предварительных версий в Java 14 и 15. Они предназначены для упрощения создания неизменяемых (immutable) классов, которые используются для хранения данных, таких как DTO (Data Transfer Objects) или простые модели данных. Основная цель record классов — сократить объем шаблонного кода (boilerplate code), который обычно пишется для классов, хранящих данные, например, для геттеров, конструкторов, методов equals(), hashCode() и toString().

Объявление record класса выглядит следующим образом:

public record Person(String name, int age) {}


В этом примере Person — это record класс с двумя компонентами: name (тип String) и age (тип int).

При компиляции Java автоматически генерирует для этого класса следующее:
Финальные приватные поля для каждой компоненты (name и age).
Публичные методы доступа (геттеры) с именами, совпадающими с названиями компонент, например, name() и age().
Конструктор, который принимает все компоненты и инициализирует их.
Реализацию методов equals(), hashCode() и toString(), которые учитывают все компоненты.


Важно отметить, что record классы по умолчанию неизменяемы: после создания объекта его состояние нельзя изменить, так как поля финальные. Это делает их особенно удобными для безопасной передачи данных, например, в многопоточных приложениях.

Record классы также имеют ряд ограничений. Они не могут наследоваться от других классов (хотя могут реализовывать интерфейсы), и нельзя добавлять новые поля экземпляра, помимо компонент, указанных в объявлении. Однако можно определять статические поля, методы и даже конструкторы с дополнительной логикой.

Пример использования:
Person person = new Person("Alice", 25);
System.out.println(person.name()); // Alice
System.out.println(person.age()); // 25
System.out.println(person); // Person[name=Alice, age=25]


#Java #Training #Medium #Record
👍5
Что выведет код?

public class Task210425 {
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
set.add(new String("Java"));
set.add(new String("Java"));
set.add("Python");
set.add("Python".intern());

System.out.println(set.size());
}
}


#Tasks
👍3