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

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

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Всем привет! 😉

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

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

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

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


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

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

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

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

Залетаем!
✈️

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

Встреча от 06.04.25

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

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

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


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

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

@Shikin_Anatoliy - респект и уважуха 💪
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Аннотации @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
Что выведет код?

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
Варианты ответа:
Anonymous Quiz
29%
5
54%
6
9%
RuntimeException
9%
Ничего не выведет
После подготовки к собеседованию 😜

https://t.me/Java_for_beginner_dev

#Mems
Please open Telegram to view this post
VIEW IN TELEGRAM
Аннотация @Cascade в Hibernate

Аннотация @Cascade (org.hibernate.annotations.Cascade) управляет каскадными операциями (сохранение, обновление, удаление) для ассоциаций между сущностями. Она дополняет или заменяет стандартные каскадные операции JPA (CascadeType).

Отличается от javax.persistence.CascadeType тем, что поддерживает специфичные для Hibernate каскады, например, CascadeType.LOCK или CascadeType.REPLICATE.

Параметры

Принимает одно или несколько значений из перечисления org.hibernate.annotations.CascadeType:
PERSIST – сохраняет связанную сущность при сохранении родителя (аналог CascadeType.PERSIST).
MERGE – обновляет связанную сущность при обновлении родителя (аналог CascadeType.MERGE).
REMOVE – удаляет связанную сущность при удалении родителя (аналог CascadeType.REMOVE).
REFRESH – обновляет связанную сущность при обновлении родителя (аналог CascadeType.REFRESH).
DETACH – отключает связанную сущность от контекста (аналог CascadeType.DETACH).
SAVE_UPDATE – сохраняет или обновляет связанную сущность при сохранении/обновлении родителя (устарело в Hibernate 6+, вместо этого используйте PERSIST + MERGE).
LOCK – блокирует связанную сущность при блокировке родителя (специфично для Hibernate).
REPLICATE – реплицирует связанную сущность при репликации родителя (специфично для Hibernate).
DELETE – удаляет связанную сущность при удалении родителя (аналог REMOVE, но работает в некоторых случаях иначе).
DELETE_ORPHAN – удаляет связанную сущность, если она больше не связана с родителем (работает только для коллекций).


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

Каскадное сохранение и удаление
@Entity
public class Parent {
@Id
private Long id;

@OneToMany(mappedBy = "parent")
@Cascade({CascadeType.PERSIST, CascadeType.REMOVE})
private List<Child> children;
}


Что делает:
При сохранении Parent автоматически сохраняются все Child.
При удалении Parent автоматически удаляются все Child.


Каскадное обновление и управление "сиротами"
@Entity
public class Author {
@Id
private Long id;

@OneToMany(mappedBy = "author")
@Cascade({CascadeType.MERGE, CascadeType.DELETE_ORPHAN})
private List<Book> books;
}


Что делает:
При обновлении Author обновляются все связанные Book.
Если книга удаляется из списка books, она автоматически удаляется из БД (orphanRemoval).


Специфичные каскады Hibernate (LOCK, REPLICATE)
@Entity
public class Order {
@Id
private Long id;

@OneToMany(mappedBy = "order")
@Cascade({CascadeType.LOCK, CascadeType.REPLICATE})
private List<Item> items;
}


Что делает:
При блокировке Order блокируются все Item.
При репликации Order реплицируются все Item.


Разница между @Cascade и cascade в JPA

JPA (javax.persistence.CascadeType)
@OneToMany(mappedBy = "parent", cascade = {javax.persistence.CascadeType.PERSIST, javax.persistence.CascadeType.REMOVE})


Стандартный механизм JPA.
Поддерживает только базовые операции (PERSIST, MERGE, REMOVE, REFRESH, DETACH, ALL).


Hibernate (@Cascade)
@OneToMany(mappedBy = "parent")
@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DELETE_ORPHAN})


Расширенный функционал (например, DELETE_ORPHAN, LOCK, REPLICATE).
Работает только в Hibernate.


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

Если нужны специфичные для Hibernate каскады (LOCK, REPLICATE).
Если требуется удаление "сирот" (DELETE_ORPHAN).
В остальных случаях лучше использовать стандартный cascade из JPA.


Оптимизация производительности

Каскадные операции могут приводить к неожиданным DELETE/UPDATE.

Рекомендуется:
Использовать orphanRemoval только там, где это необходимо.
Избегать CascadeType.ALL (может привести к неявным удалениям).


#Java #Training #Hard #Spring #Hibernate #Cascade