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

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

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Аннотация @MappedSuperclass

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

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

Пример использования:
@MappedSuperclass
public abstract class BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(name = "created_at")
private LocalDateTime createdAt;

// Геттеры и сеттеры
}

@Entity
public class User extends BaseEntity {
private String name;
private String email;
}


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

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


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

JPA и Hibernate: Spring Data JPA использует провайдеров JPA (например, Hibernate) для работы с базой данных. Аннотация
@MappedSuperclass обрабатывается на уровне JPA, но Spring обеспечивает интеграцию через EntityManager и репозитории.
Наследование сущностей: Spring Data JPA поддерживает наследование сущностей, включая использование
@MappedSuperclass. Это позволяет избежать дублирования кода и упрощает управление общими полями.

Настройки Spring Boot
Spring Boot упрощает настройку JPA через свойства конфигурации. Вот несколько ключевых настроек, которые могут влиять на работу @MappedSuperclass:

Генерация схемы базы данных:
Если используется автоматическая генерация схемы (например, через Hibernate), Spring Boot настраивает это через свойство:
spring.jpa.hibernate.ddl-auto=update


В этом случае Hibernate создаст таблицы для дочерних сущностей, включая поля, унаследованные от маппированного суперкласса.

Интеграция с репозиториями:
Spring Data JPA предоставляет репозитории для работы с сущностями. Дочерние сущности, наследующие от @MappedSuperclass, могут быть использованы в репозиториях как обычные сущности.

Пример репозитория:
public interface UserRepository extends JpaRepository<User, Long> {
}


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

Использование
@MappedSuperclass для общих полей:
Подходит для случаев, когда несколько сущностей имеют общие поля (например, id, createdAt, updatedAt).
Упрощает поддержку кода и уменьшает дублирование.


Использование @Embeddable и @Embedded:
Если требуется повторное использование группы полей в нескольких сущностях, можно использовать аннотации @Embeddable и @Embedded. Это альтернатива @MappedSuperclass.

Использование наследования стратегий JPA:

В JPA также доступны другие стратегии наследования, такие как SINGLE_TABLE, JOINED и TABLE_PER_CLASS. Они могут быть использованы вместо @MappedSuperclass, если требуется более сложная модель наследования.

Пример использования стратегии SINGLE_TABLE:
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public abstract class BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
}

@Entity
public class User extends BaseEntity {
private String name;
}


#Java #Training #Hard #Spring #SpringDataJPA #MappedSuperclass