Java for Beginner
672 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
Еще раз привет! 🖖

Хотел сказать, что если ничего вдруг не изменится, то завтра в 16:00 по МСК, я буду ждать Вас на встрече, в том же месте😄

Начнем создание приложения с подробного разбора создания сущности:

🔜 Узнаем что такое сущности и зачем они вообще нужны.
🔜 Пройдемся по основным свойствам и настройкам
🔜 Изучим на примере основные аннотации, пощупаем их в работе
🔜 Напишем мини-приложение в котором все это протестируем.

Жду всех. Как всегда 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Изучаем Entity, настройки и почти все аннотации. Встреча от 09.03.2025

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

Что мы рассмотрели в видео:

🔜 Узнали что такое сущности и зачем они вообще нужны.
🔜 Прошлись по основным свойствам и настройкам.
🔜 Изучили на примере основные аннотации, пощупаем их в работе.
🔜 Написали мини-приложение в котором все это протестировали.
🔜 Проверили работоспособность через Postman

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

Всем хорошего настроения и терпения при просмотре! 🍸
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
Аннотация @Embeddable

Аннотация @Embeddable используется в Java Persistence API (JPA) для обозначения класса, который может быть встроен (embedded) в другую сущность. Класс, помеченный этой аннотацией, не является самостоятельной сущностью, но его поля могут быть включены в таблицу сущности, которая его использует. Аннотация находится в пакете javax.persistence (или jakarta.persistence в Jakarta EE).

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

Пример использования:
@Embeddable
public class Address {
private String street;
private String city;
private String zipCode;
}


Класс, помеченный @Embeddable, по умолчанию не имеет отдельной таблицы в базе данных. Его поля включаются в таблицу сущности, которая его использует.
Если встроенный класс содержит поля, которые сами являются сущностями или коллекциями, их маппинг должен быть явно настроен с использованием других аннотаций JPA (например, @OneToMany, @ManyToOne).

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

Применение: Аннотация @Embeddable применяется на этапе маппинга сущности JPA. Она определяет, что класс может быть встроен в другую сущность.
Инициализация: При загрузке сущности из базы данных JPA создает экземпляр встроенного класса и заполняет его данными.
Уничтожение: При сохранении сущности в базу данных JPA сохраняет данные встроенного класса в таблицу сущности.


Кастомизация маппинга:
Если требуется переопределить маппинг полей встроенного класса, можно использовать аннотации
@AttributeOverride и @AttributeOverrides в сущности, которая использует встроенный класс.

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

Использование встроенных классов:
Подходит для случаев, когда требуется повторно использовать группу полей в нескольких сущностях.
Упрощает код, так как не требуется дублировать поля в разных сущностях.


Переопределение маппинга:
Позволяет гибко настраивать маппинг полей встроенного класса для каждой сущности, используя @AttributeOverride и @AttributeOverrides.

Использование встроенных классов с коллекциями:

Если встроенный класс содержит коллекции, их маппинг должен быть явно настроен с использованием аннотаций JPA (например, @ElementCollection).

Пример использования
@Embeddable
public class Address {
private String street;
private String city;
private String zipCode;
}

@Entity
public class User {
@Id
private Long id;

@Embedded
private Address homeAddress;

@Embedded
@AttributeOverrides({
@AttributeOverride(name = "street", column = @Column(name = "work_street")),
@AttributeOverride(name = "city", column = @Column(name = "work_city"))
})
private Address workAddress;
}


В этом примере:

Класс Address помечен как @Embeddable и может быть встроен в сущность User.
Поля homeAddress и workAddress включаются в таблицу User.
Для workAddress используется переопределение маппинга с помощью
@AttributeOverrides.

#Java #Training #Hard #Spring #SpringDataJPA #Embeddable
Что выведет код?

public class Task100325 {
public static void print(int a) {
System.out.println("int: " + a);
}

public static void print(double a) {
System.out.println("double: " + a);
}
public static void print(float a) {
System.out.println("float: " + a);
}

public static void main(String[] args) {
print(10);
print(10L);
}
}


#Tasks
Из наставления "Юный Девопс" 😂

https://t.me/Java_for_beginner_dev

#Mems
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопросы с собеседования 👩‍💻

Что произойдёт, если не указать модификатор доступа для метода?
Anonymous Quiz
5%
Метод станет private
21%
Метод станет public
61%
Метод станет default
12%
Ошибка компиляции
Аннотация @Embedded

Аннотация @Embedded используется в Java Persistence API (JPA) для указания того, что поле сущности является встроенным объектом (embedded object). Встроенный объект — это класс, помеченный аннотацией @Embeddable, который не является самостоятельной сущностью, но его поля включаются в таблицу сущности, которая его использует. Аннотация @Embedded находится в пакете javax.persistence (или jakarta.persistence в Jakarta EE).

Аннотация @Embedded не принимает параметров. Она просто указывает, что поле сущности является встроенным объектом.

Пример использования:
@Entity
public class User {
@Id
private Long id;

@Embedded
private Address address;
}


Если аннотация @Embedded не указана, JPA автоматически распознает встроенные объекты, если их класс помечен аннотацией @Embeddable.
Поля встроенного объекта включаются в таблицу сущности, которая его использует.

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

Применение: Аннотация @Embedded применяется на этапе маппинга сущности JPA. Она определяет, что поле является встроенным объектом.
Инициализация: При загрузке сущности из базы данных JPA создает экземпляр встроенного объекта и заполняет его данными.
Уничтожение: При сохранении сущности в базу данных JPA сохраняет данные встроенного объекта в таблицу сущности.


Кастомизация маппинга:
Если требуется переопределить маппинг полей встроенного объекта, можно использовать аннотации @AttributeOverride и @AttributeOverrides в сущности, которая использует встроенный объект.

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

Использование встроенных объектов:

Подходит для случаев, когда требуется повторно использовать группу полей в нескольких сущностях.
Упрощает код, так как не требуется дублировать поля в разных сущностях.


Переопределение маппинга:
Позволяет гибко настраивать маппинг полей встроенного объекта для каждой сущности, используя @AttributeOverride и @AttributeOverrides.

Использование встроенных объектов с коллекциями:
Если встроенный объект содержит коллекции, их маппинг должен быть явно настроен с использованием аннотаций JPA (например, @ElementCollection).

#Java #Training #Hard #Spring #SpringDataJPA #Embedded
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Аннотация @Inheritance

Аннотация @Inheritance используется в Java Persistence API (JPA) для определения стратегии наследования сущностей. Она позволяет указать, как сущности, связанные отношениями наследования, будут отображаться на таблицы базы данных. Аннотация находится в пакете javax.persistence (или jakarta.persistence в Jakarta EE).

Аннотация @Inheritance принимает один параметр — strategy, который определяет стратегию наследования.

Параметр strategy может принимать одно из следующих значений:
InheritanceType.SINGLE_TABLE:
Все сущности в иерархии наследования отображаются на одну таблицу.
Для различения типов сущностей используется дискриминаторный столбец (discriminator column).

Пример:
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING)
public class Vehicle { ... }


InheritanceType.JOINED:
Каждая сущность в иерархии наследования отображается на отдельную таблицу.
Общие поля хранятся в таблице родительской сущности, а уникальные поля — в таблицах дочерних сущностей.


Пример:
@Inheritance(strategy = InheritanceType.JOINED)
public class Vehicle { ... }


InheritanceType.TABLE_PER_CLASS:
Каждая сущность в иерархии наследования отображается на отдельную таблицу, и все поля (включая унаследованные) хранятся в таблице дочерней сущности.

Пример:
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Vehicle { ... }


Если аннотация
@Inheritance не указана, JPA по умолчанию использует стратегию InheritanceType.SINGLE_TABLE.

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

Применение: Аннотация
@Inheritance применяется на этапе маппинга сущности JPA. Она определяет, как сущности в иерархии наследования будут отображаться на таблицы базы данных.
Инициализация: При загрузке сущности из базы данных JPA использует указанную стратегию наследования для создания объектов.
Уничтожение: При сохранении сущности в базу данных JPA использует указанную стратегию наследования для записи данных.


Кастомизация стратегии наследования:
Если требуется изменить стратегию наследования для конкретной иерархии сущностей, можно использовать аннотацию @Inheritance с нужным значением параметра strategy.

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

Стратегия SINGLE_TABLE
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING)
public class Vehicle {
@Id
private Long id;
private String manufacturer;
}

@Entity
@DiscriminatorValue("CAR")
public class Car extends Vehicle {
private int numberOfSeats;
}

@Entity
@DiscriminatorValue("TRUCK")
public class Truck extends Vehicle {
private double payloadCapacity;
}


Стратегия JOINED
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Vehicle {
@Id
private Long id;
private String manufacturer;
}

@Entity
public class Car extends Vehicle {
private int numberOfSeats;
}

@Entity
public class Truck extends Vehicle {
private double payloadCapacity;
}
Стратегия TABLE_PER_CLASS
java
Copy
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Vehicle {
@Id
private Long id;
private String manufacturer;
}

@Entity
public class Car extends Vehicle {
private int numberOfSeats;
}

@Entity
public class Truck extends Vehicle {
private double payloadCapacity;
}


#Java #Training #Hard #Spring #SpringDataJPA #Inheritance
Что выведет код?

public class Task110325 {
public static void main(String[] args) {
String str = "Hello, Java!";
String result = str.substring(str.indexOf("J"), str.length() - 2).toUpperCase();
System.out.println(result);
}
}


#Tasks
Варианты ответа:
Anonymous Quiz
18%
JAVA
55%
JAV
14%
HELLO, JAVA
14%
RuntimeException