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

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

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Вопросы с собеседования 👩‍💻

Какой метод преобразует объект в строку в StringBuilder?
Anonymous Quiz
12%
getString()
8%
build()
73%
toString()
6%
convert()
👍1
Аннотация @BatchSize в Spring (Hibernate)

Аннотация @BatchSize принадлежит пакету org.hibernate.annotations и используется для оптимизации загрузки коллекций или прокси-объектов в Hibernate. Она позволяет загружать элементы пакетно (batch), уменьшая количество SQL-запросов (проблема N+1).

Применяется в двух случаях:
Для коллекций (@OneToMany, @ManyToMany) – загружает несколько связанных коллекций одним запросом.
Для лениво загружаемых сущностей (
@ManyToOne, @OneToOne) – загружает несколько прокси-объектов партиями.

Параметры и настройки
У аннотации есть один обязательный параметр - size: размер пакета (сколько элементов загружать за один SQL-запрос), обычно 10, 20, 50.

Примеры использования
Пакетная загрузка коллекций (N+1 Problem Fix)
@Entity
public class Author {
@Id
private Long id;

@OneToMany(mappedBy = "author")
@BatchSize(size = 10) // Загружает до 10 книг за один запрос
private List<Book> books;
}


Как работает:
Если загружается 100 авторов, без @BatchSize Hibernate выполнит 100+1 запрос (1 для авторов + 100 для книг каждого).
С
@BatchSize(size=10) Hibernate сделает 1 запрос для авторов + 10 запросов для книг (каждый запрос загружает книги для 10 авторов).

Пакетная загрузка ленивых сущностей
@Entity
public class Book {
@Id
private Long id;

@ManyToOne(fetch = FetchType.LAZY)
@BatchSize(size = 5) // Загружает авторов пачками по 5
private Author author;
}


Как работает:
При обращении к book.getAuthor(), Hibernate не загружает автора сразу, а ждёт, пока не потребуются несколько авторов.
Когда накопятся 5 ленивых прокси, Hibernate выполнит один запрос вида:


SELECT * FROM author WHERE id IN (1, 2, 3, 4, 5)


Жизненный цикл

Инициализация прокси/коллекции – Hibernate откладывает загрузку до первого обращения.
Пакетная загрузка – при достижении size или принудительной инициализации (например, Hibernate.initialize()).
Кэширование – загруженные объекты помещаются в кэш первого уровня (Session).


Настройки Hibernate в Spring Boot

@BatchSize работает на уровне Hibernate, но Spring Boot позволяет управлять его поведением через:
spring.jpa.properties.hibernate.default_batch_fetch_size (в
application.properties)

spring.jpa.properties.hibernate.default_batch_fetch_size=20
Устанавливает глобальный размер пакета для всех ленивых загрузок.


Если
@BatchSize указан на поле, он имеет приоритет.

Оптимизация запросов

JOIN FETCH (в JPQL) загружает данные одним запросом, но может привести к Cartesian Product.
@BatchSize даёт баланс между количеством запросов и объёмом данных.
@BatchSize можно комбинировать с @EntityGraph, но обычно @EntityGraph полностью отключает ленивую загрузку.

#Java #Training #Hard #Spring #Hibernate #BatchSize
👍3
This media is not supported in your browser
VIEW IN TELEGRAM
Всем привет! 😉

Вот и очередная неделя позади... Можно расслабиться и покодить для себя 😁

Сегодня мы посмотрим очередную подборку смешных "выходных" видео, а вот завтра вновь встретимся и полайфкодим!
🤓

Напишем тестовое задание одной из реальных компаний 🫡

Так что планируем завтра встретиться!


А в остальном всем прекрасных выходных!🙏☀️
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
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
🤣2
Всем привет!

Сегодня в 16:00 по МСК, мы вновь соберемся в Яндекс.Телемост чтобы полайфкодить! ✏️

@Shikin_Anatoliy на основе реального тестового задания напишет сервис для проведения футбольных матчей на Spring. ⚽️

Приходите! Будет интересно👍
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Встреча создана! ✌️

Залетаем!
✈️

https://telemost.yandex.ru/j/30485143273118
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Пишем тестовое задание от реального работодателя для новичков! Часть 1 (начало).

Встреча от 06.04.25

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

На сегодняшней встрече наш подписчик @Shikin_Anatoliy рискнул самостоятельно написать тестовое задание от реального работодателя.

Что мы успели в рамках первой серии:
- Коротко разобрать и обсудить логику приложения.
- Написать сущности, дто, репозитории и даже один сервис с контроллером.
- Допустили и решили пару систематических ошибок, повторили основы написания.


Ждите продолжения!

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

@Shikin_Anatoliy - респект и уважуха 💪
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥3🤓1
📌 Факт дня

А вы знали, что первая "социальная сеть" появилась в 1997 году?

SixDegrees.com позволяла создавать профили и добавлять друзей. Она закрылась в 2001 году, но стала предшественником современных соцсетей.


proof

#facts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
📌 Цитата дня: Ларри Уолл

"Лень, нетерпение и гордыня — три добродетели программиста."


Ларри Уолл, создатель Perl, написал это в 1997 году в книге "Programming Perl", описывая мотивацию разработчиков.

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

#Citation #Biography
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
Аннотации @Cache и @Cacheable в Hibernate

Аннотации
@Cache и @Cacheable относятся к кешированию сущностей и коллекций в Hibernate. Они позволяют оптимизировать производительность за счёт хранения часто используемых данных в памяти, уменьшая количество обращений к базе данных.

@Cache (org.hibernate.annotations.Cache) – настраивает стратегию кеширования для сущности или коллекции.
@Cacheable (javax.persistence.Cacheable / jakarta.persistence.Cacheable) – указывает, что сущность может быть кеширована (используется вместе с @Cache).

@Cache (Hibernate)

Параметры:
usage (CacheConcurrencyStrategy) – стратегия кеширования:

READ_ONLY – только для чтения (если сущность не изменяется).
NONSTRICT_READ_WRITE – кеш обновляется асинхронно при изменениях.
READ_WRITE – гарантирует согласованность через мягкие блокировки.
TRANSACTIONAL – полная поддержка транзакций (для JTA).


region (опционально)имя региона кеша (если используется несколько кешей, например, Ehcache, Hazelcast).

include (CacheInclude) указывает, включать ли ленивые поля в кеш (ALL или NON_LAZY).

Пример:
@Entity
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "employees")
public class Employee { ... }


@Cacheable (JPA)

Указывает, что сущность поддерживает кеширование.
Работает в паре с
@Cache (Hibernate) или настройками JPA-провайдера.
Если
@Cacheable(false), сущность игнорируется кешем, даже если кеширование включено глобально.

Пример:
@Entity
@Cacheable(true) // Включено кеширование (по умолчанию true)
public class Product { ... }


Механизмы кеширования в Hibernate

Уровни кеширования

Кеш первого уровня (Session)
Автоматический, живет в рамках одной сессии (EntityManager).
Не требует
@Cache.

Кеш второго уровня (SessionFactory)
Общий для всех сессий.
Требует явного объявления (
@Cache + @Cacheable).

Кеш запросов (Query Cache)
Кеширует результаты JPQL/HQL-запросов.

Включается отдельно:
spring.jpa.properties.hibernate.cache.use_query_cache=true


Настройка в Spring Boot

Включение кеша второго уровня
spring.jpa.properties.hibernate.cache.use_second_level_cache=true
spring.jpa.properties.hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.EhCacheRegionFactory
(Пример для Ehcache; также поддерживаются Infinispan, Hazelcast, Redis.)


Указание кешируемых сущностей

Через @Cache + @Cacheable.

Или глобально в application.properties:
spring.jpa.properties.javax.persistence.sharedCache.mode=ALL
(Варианты: ALL, NONE, ENABLE_SELECTIVE, DISABLE_SELECTIVE.)


Настройка поставщика кеша

Например, для Ehcache:
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
</dependency>


И файл ehcache.xml в resources/.


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

@Cache + @Cacheable – для часто читаемых, редко изменяемых данных (справочники, настройки).
READ_ONLY – если сущности никогда не обновляются (например, Country, City).
READ_WRITE – если данные изменяются, но требуется высокая скорость чтения.
Избегать для часто изменяемых данных (кеш будет постоянно инвалидироваться).


#Java #Training #Hard #Spring #Hibernate #Cache #Cacheable
👍3
Что выведет код?

import java.util.function.Function;

public class Task070425 {
public static void main(String[] args) {
Function<Integer, Integer> f = x -> x++;
System.out.println(f.apply(5));
}
}


#Tasks
👍1
Варианты ответа:
Anonymous Quiz
29%
5
54%
6
9%
RuntimeException
9%
Ничего не выведет
😱2👍1
После подготовки к собеседованию 😜

https://t.me/Java_for_beginner_dev

#Mems
Please open Telegram to view this post
VIEW IN TELEGRAM
😁51