Java for Beginner
688 subscribers
586 photos
161 videos
12 files
900 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
👍1
Вопросы с собеседования 👩‍💻

Что произойдёт, если попытаться обратиться к элементу массива за его пределами?
Anonymous Quiz
7%
Вернётся null
87%
Выбросится ArrayIndexOutOfBoundsException
3%
Программа завершится без ошибок
3%
Вернётся случайное значение
👍1
Аннотация @ManyToMany

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

Аннотация @ManyToMany принимает несколько параметров для настройки отношения:

targetEntity:
Указывает класс целевой сущности (если он не может быть выведен из типа поля).

Пример:
@ManyToMany(targetEntity = Role.class)
private List<Role> roles;


cascade: (#CASCADE)
Определяет каскадные операции, которые должны быть применены к связанным сущностям.
Возможные значения: CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE, CascadeType.REFRESH, CascadeType.DETACH, CascadeType.ALL.

Пример:
@ManyToMany(cascade = CascadeType.ALL)
private List<Role> roles;


fetch:
Определяет стратегию загрузки связанных сущностей.
Возможные значения: FetchType.EAGER (загрузка сразу) или FetchType.LAZY (ленивая загрузка).

По умолчанию: FetchType.LAZY.

Пример:
@ManyToMany(fetch = FetchType.EAGER)
private List<Role> roles;


mappedBy:
Указывает поле в целевой сущности, которое управляет отношением (используется на стороне, которая не владеет отношением).

Пример:
@ManyToMany(mappedBy = "users")
private List<Role> roles;


orphanRemoval:
Указывает, должны ли связанные сущности быть удалены при удалении их из коллекции или установке в null.
По умолчанию: false.

Пример:
@ManyToMany(orphanRemoval = true)
private List<Role> roles;


Значения по умолчанию

Если параметры не указаны, используются значения по умолчанию:
fetch = FetchType.LAZY
orphanRemoval = false


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

Применение: Аннотация
@ManyToMany применяется на этапе маппинга сущностей JPA. Она указывает, что между двумя сущностями существует отношение "многие ко многим".
Инициализация: При загрузке сущности из базы данных JPA загружает связанные сущности в зависимости от стратегии загрузки (EAGER или LAZY).
Уничтожение: При удалении сущности JPA учитывает каскадные операции и параметр orphanRemoval.


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

Одностороннее отношение:
Отношение управляется одной из сущностей. Пример:
@Entity
public class User {
@ManyToMany
private List<Role> roles;
}


Двустороннее отношение:
Отношение управляется обеими сущностями. Пример:
@Entity
public class User {
@ManyToMany(mappedBy = "users")
private List<Role> roles;
}

@Entity
public class Role {
@ManyToMany
@JoinTable(
name = "user_role",
joinColumns = @JoinColumn(name = "role_id"),
inverseJoinColumns = @JoinColumn(name = "user_id")
)
private List<User> users;
}


Каскадные операции:
Используются для автоматического применения операций к связанным сущностям. Пример:
@ManyToMany(cascade = CascadeType.ALL)
private List<Role> roles;


Ленивая загрузка:
Используется для оптимизации производительности. Пример:
@ManyToMany(fetch = FetchType.LAZY)
private List<Role> roles;


Кастомизация промежуточной таблицы:
С помощью аннотации @JoinTable можно настроить промежуточную таблицу для отношения "многие ко многим". Пример:
@ManyToMany
@JoinTable(
name = "user_role",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id")
)
private List<Role> roles;


#Java #Training #Hard #Spring #SpringDataJPA #ManyToMany
👍3
📌 Факт дня:

А вы знали, что первый "тест на разумность ИИ" был создан в 1950 году?

Алан Тьюринг предложил "Тест Тьюринга", чтобы проверить, может ли машина обмануть человека, притворившись разумной — основа для оценки ИИ.


Proof

#facts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
📌 Цитата дня: Алан Тьюринг

"Мы можем видеть только малую часть будущего, но этого достаточно, чтобы понять, что многое предстоит сделать."


Алан Тьюринг написал это в 1950 году в статье "Computing Machinery and Intelligence". Цитата вдохновляет на развитие технологий.

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

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

Аннотация @JoinColumn используется в Java Persistence API (JPA) для указания столбца в базе данных, который является внешним ключом (foreign key) и связывает текущую сущность с другой сущностью. Она находится в пакете javax.persistence (или jakarta.persistence в Jakarta EE). Эта аннотация применяется к полям или свойствам сущности, которые представляют собой связи между таблицами, такие как @OneToOne, @OneToMany, @ManyToOne и @ManyToMany.

Аннотация @JoinColumn принимает несколько параметров, которые позволяют настроить маппинг внешнего ключа:

name (тип: String):
Указывает имя столбца в базе данных, который будет использоваться как внешний ключ.
По умолчанию: если параметр не указан, JPA использует имя поля или свойства сущности, дополненное суффиксом _id (например, user_id).


referencedColumnName (тип: String):
Указывает имя столбца в целевой таблице (таблице, на которую ссылается внешний ключ).
По умолчанию: если параметр не указан, JPA использует первичный ключ целевой таблицы.


unique (тип: boolean):
Указывает, должен ли внешний ключ быть уникальным.
По умолчанию: false.

nullable (тип: boolean):
Указывает, может ли внешний ключ иметь значение NULL.
По умолчанию: true.


insertable (тип: boolean):
Указывает, должен ли столбец включаться в SQL-запросы INSERT.
По умолчанию: true.


updatable (тип: boolean):
Указывает, должен ли столбец включаться в SQL-запросы UPDATE.
По умолчанию: true.


columnDefinition (тип: String):
Позволяет указать SQL-определение столбца, которое будет использоваться при генерации схемы базы данных.
По умолчанию: не задано.


table (тип: String):
Указывает таблицу, в которой находится столбец (если сущность маппится на несколько таблиц).
По умолчанию: основная таблица сущности.


foreignKey (тип: ForeignKey):
Позволяет указать определение внешнего ключа для генерации схемы базы данных.
По умолчанию: не задано.


Пример использования:
@ManyToOne
@JoinColumn(name = "user_id", referencedColumnName = "id", nullable = false)
private User user;


Значения по умолчанию

Если аннотация @JoinColumn не указана, JPA использует имя поля или свойства сущности, дополненное суффиксом _id, в качестве имени столбца внешнего ключа.

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

Применение: Аннотация @JoinColumn применяется на этапе маппинга сущности JPA. Она используется при создании таблиц в базе данных (если используется автоматическая генерация схемы) и при выполнении операций чтения/записи данных.
Инициализация: При загрузке сущности из базы данных JPA использует указанные параметры для маппинга внешнего ключа.
Уничтожение: При сохранении сущности в базу данных JPA использует указанные параметры для генерации SQL-запросов.


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

Использование name и referencedColumnName:
Позволяет явно указать имена столбцов в базе данных, что полезно при работе с существующими схемами.

Использование nullable:
Позволяет контролировать, может ли внешний ключ быть NULL. Например, для обязательных связей можно установить nullable = false.

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

Кастомизация через columnDefinition:
Позволяет указать точное SQL-определение столбца, что полезно для сложных сценариев.

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

import java.util.TreeMap;

public class Task140325 {
public static void main(String[] args) {
TreeMap<Integer, String> map = new TreeMap<>();
map.put(5, "Five");
map.put(2, "Two");
map.put(8, "Eight");
map.put(1, "One");
System.out.println(map.higherKey(2) + map.lowerKey(5));
}
}


#Tasks
👍2
Варианты ответа:
Anonymous Quiz
15%
13
44%
7
0%
6
41%
"EightOne"
👍1
Почему-то мне кажется у него получится убедить его... 🧐 😜

https://t.me/Java_for_beginner_dev

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

Какой модификатор делает класс недоступным для наследования?
Anonymous Quiz
3%
static
9%
abstract
63%
final
25%
private
👍1
Аннотация @JoinTable

Аннотация @JoinTable используется в Java Persistence API (JPA) для указания таблицы связей (join table) между двумя сущностями в случае отношений @ManyToMany или для кастомизации связей @OneToMany и @ManyToOne. Она находится в пакете javax.persistence (или jakarta.persistence в Jakarta EE). Эта аннотация применяется к полям или свойствам сущности, которые представляют собой связи между таблицами, и позволяет настроить таблицу, которая хранит ассоциации между записями двух таблиц.

Аннотация @JoinTable принимает несколько параметров, которые позволяют настроить таблицу связей:

name (тип: String):
Указывает имя таблицы связей в базе данных.
По умолчанию: если параметр не указан, JPA генерирует имя таблицы на основе имен связанных сущностей (например, Entity1_Entity2).

catalog (тип: String):
Указывает каталог базы данных, в котором находится таблица связей.
По умолчанию: каталог по умолчанию для базы данных.


schema (тип: String):
Указывает схему базы данных, в которой находится таблица связей.
По умолчанию: схема по умолчанию для базы данных.


joinColumns (тип: JoinColumn[]):
Указывает столбцы, которые ссылаются на текущую сущность (владельца связи).
Каждый элемент массива является аннотацией
@JoinColumn, которая настраивает соответствующий столбец.
По умолчанию: JPA создает один столбец, ссылающийся на первичный ключ текущей сущности.


inverseJoinColumns (тип: JoinColumn[]):
Указывает столбцы, которые ссылаются на связанную сущность.
Каждый элемент массива является аннотацией
@JoinColumn, которая настраивает соответствующий столбец.
По умолчанию: JPA создает один столбец, ссылающийся на первичный ключ связанной сущности.


uniqueConstraints (тип: UniqueConstraint[]):
Позволяет задать уникальные ограничения для таблицы связей.
Каждый элемент массива является аннотацией
@UniqueConstraint, которая настраивает уникальное ограничение.
По умолчанию: уникальные ограничения не заданы.


indexes (тип: Index[]):
Позволяет задать индексы для таблицы связей.
Каждый элемент массива является аннотацией
@Index, которая настраивает индекс.
По умолчанию: индексы не заданы.


foreignKey (тип: ForeignKey):
Позволяет указать определение внешнего ключа для столбцов, ссылающихся на текущую сущность.
По умолчанию: не задано.


inverseForeignKey (тип: ForeignKey):
Позволяет указать определение внешнего ключа для столбцов, ссылающихся на связанную сущность.
По умолчанию: не задано.


Пример использования:
@ManyToMany
@JoinTable(
name = "user_role",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id")
)
private Set<Role> roles;


Значения по умолчанию

Если аннотация
@JoinTable не указана, JPA генерирует таблицу связей с именем, основанным на именах связанных сущностей, и создает два столбца: один для ссылки на текущую сущность, другой — на связанную сущность.

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

Применение: Аннотация @JoinTable применяется на этапе маппинга сущности JPA. Она используется при создании таблиц в базе данных (если используется автоматическая генерация схемы) и при выполнении операций чтения/записи данных.
Инициализация: При загрузке сущности из базы данных JPA использует указанные параметры для маппинга таблицы связей.
Уничтожение: При сохранении сущности в базу данных JPA использует указанные параметры для генерации SQL-запросов.


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

Использование name:
Позволяет явно указать имя таблицы связей, что полезно при работе с существующими схемами.
Использование joinColumns и inverseJoinColumns:
Позволяет настроить столбцы, ссылающиеся на текущую и связанную сущности.
Использование uniqueConstraints:
Позволяет задать уникальные ограничения для таблицы связей, что полезно для предотвращения дублирования записей.


Использование indexes:
Позволяет улучшить производительность запросов к таблице связей.
Использование foreignKey и inverseForeignKey:
Позволяет задать определения внешних ключей для таблицы связей.


#Java #Training #Hard #Spring #SpringDataJPA #JoinTable
👍1
Всем доброе утро! 🔆

Как пережили неделю?

За окном уже пахнет весной, поэтому всем рекомендую, если погода позволяет, пойти и подышать воздухом 💪

А насчет завтрашней встречи, пока есть сомнения. Я ничего не готовил, а не готовому идти Вам не хочется 😉

Если все-таки желаете, можно порешать задачки... Ну пишите в комментах 😜

А в остальном всем хорошего дня
🖐
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Всем привет! 🖐

Решили все-таки сегодня собраться! В 16:00 как всегда в Яндекс.Телемост

@Shikin_Anatoliy попробует написать простой CRUD сервис, а мы ему в случае чего, поможем!

Полезный лайф-кодинг для новичков, приходите будем учиться вместе 💪

На фото админ, пишет пет-проект

Ждем всех!
✌️
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
https://telemost.yandex.ru/j/11766846568901 - встреча создана!

Залетаем!
👍4
Встреча_в_Телемосте_16_03_25_20_32_18_—_запись.webm
665.9 MB
Сегодняшняя встреча!

@Shikin_Anatoliy написал неплохой обучающий сервис используя основные аннотации Spring.

Несмотря на то что мы не смогли все это протестировать, видео полезно для новичков в спринг, которые хотят написать свой простой веб-сервис!

@Shikin_Anatoliy большое спасибо за труд! 💪
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
📌 Факт дня:

А вы знали, что первое соревнование по "киберспорту" произошло в далеком 1972 году?

Турнир по "Spacewar!" в Стэнфорде считается первым соревнованием по видеоиграм. С помощью бесплатного пива и бесплатной годовой подписки на "Rolling Stones" удалось привлечь около 20 участников.


Proof

#facts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1
📌 Цитата дня: Сатья Наделла

"Наша индустрия не уважает традиций — она уважает только инновации."


Сатья Наделла, CEO Microsoft, сказал это в 2014 году на пресс-конференции в Редмонде, подчеркивая необходимость постоянного развития.

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

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

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

Аннотация @ElementCollection принимает несколько параметров, которые позволяют настроить маппинг коллекции:

fetch (тип: FetchType):
Указывает стратегию загрузки данных: FetchType.EAGER (жадная загрузка) или FetchType.LAZY (ленивая загрузка).
По умолчанию: FetchType.LAZY.

targetClass (тип: Class<?>):
Указывает класс элементов коллекции, если он не может быть выведен из типа коллекции.
По умолчанию: тип элементов коллекции выводится автоматически.


Дополнительные параметры:
Аннотация @ElementCollection часто используется в сочетании с @CollectionTable для настройки таблицы, в которой хранятся элементы коллекции.

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

Применение: Аннотация @ElementCollection применяется на этапе маппинга сущности JPA. Она используется при создании таблиц в базе данных (если используется автоматическая генерация схемы) и при выполнении операций чтения/записи данных.
Инициализация: При загрузке сущности из базы данных JPA использует указанные параметры для маппинга коллекции.
Уничтожение: При сохранении сущности в базу данных JPA использует указанные параметры для генерации SQL-запросов.


Кастомизация маппинга:
Если требуется кастомизировать маппинг коллекций (например, использовать собственные индексы или ограничения), можно использовать аннотацию @CollectionTable с параметрами uniqueConstraints, indexes и foreignKey.

Пример использования @CollectionTable с кастомизацией:
@ElementCollection
@CollectionTable(
name = "phone_numbers",
joinColumns = @JoinColumn(name = "user_id"),
uniqueConstraints = @UniqueConstraint(columnNames = {"user_id", "phone_number"}),
indexes = @Index(columnList = "phone_number")
)
@Column(name = "phone_number")
private Set<String> phoneNumbers;


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

Использование @CollectionTable:
Позволяет явно указать имя таблицы и столбцы для хранения элементов коллекции.

Использование @Column:
Позволяет указать имя столбца для хранения элементов коллекции.

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

Использование fetch:
Позволяет управлять стратегией загрузки данных (жадная или ленивая загрузка).

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

import java.util.HashMap;

public class Task170325 {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
map.put(new String("a"), 1);
map.put(new String("a"), 2);

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


#Tasks
👍2