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

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

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

Какой оператор используется для побитового "ИЛИ"?
Anonymous Quiz
40%
||
2%
&
44%
|
13%
&&
👍1🔥1
Аннотация @MapsId

Аннотация @MapsId используется в JPA (Java Persistence API) для указания, что внешний ключ сущности также является её первичным ключом. Это полезно при работе с отношениями "один к одному" или "многие к одному", где дочерняя сущность использует первичный ключ родительской сущности в качестве своего собственного первичного ключа. Аннотация находится в пакете javax.persistence.

Параметры аннотации

value (необязательный):
Тип: String.
Значение по умолчанию: "".
Описание: Указывает имя атрибута сущности, который является первичным ключом. Если не указано, используется первичный ключ родительской сущности.


Пример:
@MapsId("userId")
@OneToOne
@JoinColumn(name = "user_id")
private User user;


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

Инициализация:
Аннотация @MapsId обрабатывается во время инициализации JPA-провайдера (например, Hibernate). JPA-провайдер анализирует сущность и создает метаданные для связи с родительской сущностью.

Выполнение:
Когда сущность сохраняется, обновляется или извлекается из базы данных, JPA-провайдер использует первичный ключ родительской сущности в качестве первичного ключа дочерней сущности.

Уничтожение:
Аннотация не имеет явного жизненного цикла уничтожения, так как она используется только для конфигурации связи с родительской сущностью.

Варианты настройки

Использование с @OneToOne:
Аннотация @MapsId часто используется с отношением "один к одному":

@Entity
public class UserProfile {
@Id
private Long userId;

@MapsId
@OneToOne
@JoinColumn(name = "user_id")
private User user;

// Остальные поля и методы
}


Использование с @ManyToOne:
Аннотация @MapsId также может использоваться с отношением "многие к одному":
@Entity
public class Order {
@Id
private Long orderId;

@MapsId("userId")
@ManyToOne
@JoinColumn(name = "user_id")
private User user;

// Остальные поля и методы
}


Использование с составными ключами:
Аннотация
@MapsId может использоваться с составными ключами, если родительская сущность имеет составной ключ:
@Entity
public class UserProfile {
@EmbeddedId
private UserProfileId id;

@MapsId("userId")
@ManyToOne
@JoinColumns({
@JoinColumn(name = "department_id", referencedColumnName = "departmentId"),
@JoinColumn(name = "user_id", referencedColumnName = "userId")
})
private User user;

// Остальные поля и методы
}


Использование с репозиториями:
Репозитории Spring Data JPA могут работать с сущностями, имеющими аннотацию @MapsId:

public interface UserProfileRepository extends JpaRepository<UserProfile, Long> {
// Методы репозитория
}


#Java #Training #Hard #Spring #SpringDataJPA #MapsId
👍1
Всем доброго субботнего утра! ☀️

Еще одна неделя позади и все ближе лето! ✈️

Надеюсь у всех остались силы пописать свои пет-проекты
😄

Напоминаю!

Завтра мы как всегда собираемся в 16:00 по МСК, для лайф-кодинга! Напишем телегам чат-бота, который будет показывать погоду по запросу

Вроде бы и не сложно, но писать будем на Spring.


А в остальном - теплых Вам выходных! ✌️
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
This media is not supported in your browser
VIEW IN TELEGRAM
Или как аналитик преподносит требования бизнеса

https://t.me/Java_for_beginner_dev

#Mems
👍1
Всем хорошего воскресения! 🖐

Напоминаю!

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

Разберемся как написать своего чат бота в телеграм на Spring, подключим к нему API OpenWeather и заставим показывать текущую погоду в любой точке мира.


Приходите - будет интересно! 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
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
👍31
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1👨‍💻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
👍3
This media is not supported in your browser
VIEW IN TELEGRAM
Небольшой hotfix на твой первый проект на проде 🤣

https://t.me/Java_for_beginner_dev

#Mems
Please open Telegram to view this post
VIEW IN TELEGRAM
https://telemost.yandex.ru/j/56831971908928

Встреча создана - залетаем! 🛫
Please open Telegram to view this post
VIEW IN TELEGRAM
Пишем погодного телеграм-бота! ☀️

Встреча от 30.03.2025

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

На сегодняшней встрече мы написали своего бота.
🤖

При написании мы узнали и повторили:
🔜 Как вообще пишут бота и с какими библиотеками.
🔜 Как работает логика бота.
🔜 Как по REST передают json и как его парсить.
🔜 Настроили свой кэш и шедулер.
🔜 Как всегда допустил немного ошибок и успешно их решил)

Кстати в гите более полная версия того бота который я запускал Вам для теста!
Ссылка на Git - https://github.com/Oleborn/WeatherChatBot

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

Всем спасибо за участие и то что пришли, для меня это важно!

Надеюсь вы напишете своих ботов и обязательно похвастаете перед нами 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍1
📌 Факт дня

А вы знали, что первое официально зарегистрированное нападение робота-доставщика на человека произошло в 2023 году?

В середине июня 2023 года робот-курьер от Starship Technologies неоднократно нападал на британца и его собаку, а сам инцидент произошел в британском городе Милтон-Кинс.


Ну и пруф

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

"Программное обеспечение — это газ: оно расширяется, заполняя любой объем."


Натан Мирвольд, бывший CTO Microsoft, сказал это в 1991 году в интервью журналу Forbes, описывая природу ПО.

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

#Citation #Biography
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Аннотация @CreatedBy

Аннотация @CreatedBy используется в Spring Data для автоматического заполнения поля информацией о пользователе, создавшем сущность. Это часть механизма аудита Spring Data, позволяющего автоматически отслеживать, кто и когда создавал или изменял сущности. Аннотация находится в пакете org.springframework.data.annotation.

Параметры аннотации

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

Пример использования:
@Entity
@EntityListeners(AuditingEntityListener.class)
public class Document {
@CreatedBy
private String createdBy;

// Другие поля
}


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

Инициализация:
Аннотация активируется при включении аудита через @EnableJpaAuditing
Требуется регистрация AuditingEntityListener для сущности


Выполнение:
Перед сохранением новой сущности (при вызове save())
Spring автоматически определяет текущего пользователя и устанавливает значение поля


Обновление:
Поле заполняется только при создании сущности
Не изменяется при последующих обновлениях


Механизмы Spring и настройки Spring Boot

AuditingEntityListener:
Класс, обрабатывающий события жизненного цикла сущности
Автоматически заполняет аннотированные поля


AuditorAware:
Интерфейс для получения информации о текущем пользователе
Требуется реализация для работы
@CreatedBy

EnableJpaAuditing:
Аннотация для активации механизма аудита

Настройки Spring Boot

Активация аудита:
@Configuration
@EnableJpaAuditing
public class AuditConfig {
@Bean
public AuditorAware<String> auditorProvider() {
return () -> Optional.ofNullable(SecurityContextHolder.getContext())
.map(SecurityContext::getAuthentication)
.map(Authentication::getName);
}
}


Конфигурация сущности:
@Entity
@EntityListeners(AuditingEntityListener.class)
public class Order {
@CreatedBy
private String createdBy;

@CreatedDate
private LocalDateTime createdDate;

// Другие поля
}


Настройки безопасности (если используется Spring Security):
spring.security.user.name=admin
spring.security.user.password=secret


Варианты настройки

Типы полей:
Может использоваться с любым типом (String, Long, UUID)
Чаще всего используется String для хранения имени пользователя


Интеграция с Spring Security:
Автоматическое получение имени текущего пользователя

Пример реализации AuditorAware:
public class SecurityAuditorAware implements AuditorAware<String> {
@Override
public Optional<String> getCurrentAuditor() {
return Optional.ofNullable(SecurityContextHolder.getContext())
.map(SecurityContext::getAuthentication)
.filter(Authentication::isAuthenticated)
.map(Authentication::getName);
}
}


Кастомные реализации:
Возможность использовать ID пользователя вместо имени
Интеграция с кастомными системами аутентификации


Комбинирование с другими аннотациями аудита:
@CreatedBy
private String createdBy;

@CreatedDate
private LocalDateTime createdDate;

@LastModifiedBy
private String lastModifiedBy;

@LastModifiedDate
private LocalDateTime lastModifiedDate;


#Java #Training #Hard #Spring #SpringDataJPA #CreatedBy
👍3
Что выведет код?

import java.util.LinkedList;

public class Task310325 {
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<>();
list.add(1);
list.add(2);
list.addFirst(3);
list.removeLast();

System.out.println(list.get(1));
}
}


#Tasks
👍4
Варианты ответа:
Anonymous Quiz
33%
1
22%
2
35%
3
11%
Какой-то Exception
👍1
Это хорошо когда есть за кем ходить😂

https://t.me/Java_for_beginner_dev

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