Please open Telegram to view this post
VIEW IN TELEGRAM
Вопросы с собеседования 👩💻
Что такое пакет (package) в Java?
Что такое пакет (package) в Java?
Anonymous Quiz
7%
Набор случайных классов
78%
Пространство имён для группировки классов
6%
Тип данных
9%
Метод для импорта кода
Аннотация @Modifying
Аннотация @Modifying используется в Spring Data JPA для указания того, что метод репозитория выполняет модифицирующие операции (например, UPDATE, DELETE, INSERT) в базе данных. Она применяется в сочетании с аннотацией @Query и находится в пакете org.springframework.data.jpa.repository.
Параметры аннотации
flushAutomatically (необязательный):
Тип: boolean.
Значение по умолчанию: false.
Описание: Если установлено в true, то перед выполнением запроса будет выполнен сброс (flush) контекста (Persistence Context). Это гарантирует, что все ожидающие изменения будут синхронизированы с базой данных перед выполнением модифицирующего запроса.
Пример:
clearAutomatically (необязательный):
Тип: boolean.
Значение по умолчанию: false.
Описание: Если установлено в true, то после выполнения запроса будет очищен (clear) контекст (Persistence Context). Это полезно, чтобы избежать использования устаревших данных из кэша первого уровня.
Пример:
Жизненный цикл аннотации
Инициализация:
Аннотация @Modifying обрабатывается во время инициализации Spring-контекста. Spring Data JPA анализирует методы репозитория, помеченные @Modifying, и настраивает их для выполнения модифицирующих операций.
Выполнение:
Когда метод репозитория вызывается, Spring Data JPA выполняет запрос, указанный в @Query, с учетом настроек @Modifying. Если flushAutomatically = true, выполняется сброс контекста перед запросом. Если clearAutomatically = true, контекст очищается после запроса.
Уничтожение:
Аннотация не имеет явного жизненного цикла уничтожения, так как она используется только для конфигурации выполнения запросов.
Механизмы Spring, связанные с @Modifying
Spring Data JPA:
Spring Data JPA предоставляет реализацию репозиториев, которая автоматически обрабатывает аннотацию @Modifying. Она интегрируется с JPA-провайдером (например, Hibernate) для выполнения модифицирующих запросов.
JPA-провайдер:
JPA-провайдер (например, Hibernate) отвечает за выполнение модифицирующих запросов. Для операций UPDATE и DELETE JPA-провайдер использует механизм EntityManager.
Транзакционность:
Методы, помеченные @Modifying, должны выполняться в транзакции. Если транзакция не настроена, Spring Data JPA выбросит исключение. Транзакционность можно настроить с помощью аннотации @Transactional.
Spring Boot автоматически настраивает менеджер транзакций (PlatformTransactionManager). Для методов с @Modifying рекомендуется явно указать транзакционность:
Варианты настройки
Использование flushAutomatically:
Установка flushAutomatically = true полезна, если в контексте есть изменения, которые должны быть синхронизированы с базой данных перед выполнением модифицирующего запроса.
Использование clearAutomatically:
Установка clearAutomatically = true полезна, если после выполнения модифицирующего запроса необходимо избежать использования устаревших данных из кэша первого уровня.
Комбинирование с @Query:
Аннотация @Modifying всегда используется вместе с @Query. Например:
Использование @Transactional:
Методы с @Modifying должны быть помечены аннотацией @Transactional, чтобы гарантировать атомарность операций.
#Java #Training #Hard #Spring #SpringDataJPA #Modifying
Аннотация @Modifying используется в Spring Data JPA для указания того, что метод репозитория выполняет модифицирующие операции (например, UPDATE, DELETE, INSERT) в базе данных. Она применяется в сочетании с аннотацией @Query и находится в пакете org.springframework.data.jpa.repository.
Параметры аннотации
flushAutomatically (необязательный):
Тип: boolean.
Значение по умолчанию: false.
Описание: Если установлено в true, то перед выполнением запроса будет выполнен сброс (flush) контекста (Persistence Context). Это гарантирует, что все ожидающие изменения будут синхронизированы с базой данных перед выполнением модифицирующего запроса.
Пример:
@Modifying(flushAutomatically = true)
@Query("UPDATE User u SET u.active = false WHERE u.lastLogin < :date")
void deactivateUsers(@Param("date") LocalDate date);
clearAutomatically (необязательный):
Тип: boolean.
Значение по умолчанию: false.
Описание: Если установлено в true, то после выполнения запроса будет очищен (clear) контекст (Persistence Context). Это полезно, чтобы избежать использования устаревших данных из кэша первого уровня.
Пример:
@Modifying(clearAutomatically = true)
@Query("DELETE FROM User u WHERE u.active = false")
void deleteInactiveUsers();
Жизненный цикл аннотации
Инициализация:
Аннотация @Modifying обрабатывается во время инициализации Spring-контекста. Spring Data JPA анализирует методы репозитория, помеченные @Modifying, и настраивает их для выполнения модифицирующих операций.
Выполнение:
Когда метод репозитория вызывается, Spring Data JPA выполняет запрос, указанный в @Query, с учетом настроек @Modifying. Если flushAutomatically = true, выполняется сброс контекста перед запросом. Если clearAutomatically = true, контекст очищается после запроса.
Уничтожение:
Аннотация не имеет явного жизненного цикла уничтожения, так как она используется только для конфигурации выполнения запросов.
Механизмы Spring, связанные с @Modifying
Spring Data JPA:
Spring Data JPA предоставляет реализацию репозиториев, которая автоматически обрабатывает аннотацию @Modifying. Она интегрируется с JPA-провайдером (например, Hibernate) для выполнения модифицирующих запросов.
JPA-провайдер:
JPA-провайдер (например, Hibernate) отвечает за выполнение модифицирующих запросов. Для операций UPDATE и DELETE JPA-провайдер использует механизм EntityManager.
Транзакционность:
Методы, помеченные @Modifying, должны выполняться в транзакции. Если транзакция не настроена, Spring Data JPA выбросит исключение. Транзакционность можно настроить с помощью аннотации @Transactional.
Spring Boot автоматически настраивает менеджер транзакций (PlatformTransactionManager). Для методов с @Modifying рекомендуется явно указать транзакционность:
@Transactional
@Modifying
@Query("UPDATE User u SET u.active = false WHERE u.lastLogin < :date")
void deactivateUsers(@Param("date") LocalDate date);
Варианты настройки
Использование flushAutomatically:
Установка flushAutomatically = true полезна, если в контексте есть изменения, которые должны быть синхронизированы с базой данных перед выполнением модифицирующего запроса.
Использование clearAutomatically:
Установка clearAutomatically = true полезна, если после выполнения модифицирующего запроса необходимо избежать использования устаревших данных из кэша первого уровня.
Комбинирование с @Query:
Аннотация @Modifying всегда используется вместе с @Query. Например:
Использование @Transactional:
Методы с @Modifying должны быть помечены аннотацией @Transactional, чтобы гарантировать атомарность операций.
#Java #Training #Hard #Spring #SpringDataJPA #Modifying
Аннотация @Param
Аннотация @Param используется в Spring Data JPA для привязки параметров метода к именованным параметрам в JPQL или нативных SQL-запросах. Она позволяет явно указать, какие аргументы метода должны быть переданы в запрос. Аннотация находится в пакете org.springframework.data.repository.query.
Параметры аннотации
value (обязательный):
Тип: String.
Описание: Указывает имя параметра, которое будет использоваться в запросе. Это имя должно совпадать с именем параметра в запросе, указанном в @Query.
Пример:
Жизненный цикл аннотации
Инициализация:
Аннотация @Param обрабатывается во время инициализации Spring-контекста. Spring Data JPA анализирует методы репозитория и связывает параметры метода с именованными параметрами в запросе.
Выполнение:
Когда метод репозитория вызывается, Spring Data JPA подставляет значения параметров метода в запрос, используя имена, указанные в @Param.
Уничтожение:
Аннотация не имеет явного жизненного цикла уничтожения, так как она используется только для привязки параметров.
Варианты настройки
Использование в JPQL:
Аннотация @Param используется для привязки параметров в JPQL-запросах:
Использование в нативных SQL-запросах:
Аннотация @Param также может использоваться в нативных SQL-запросах:
Использование с @Modifying:
Аннотация @Param может использоваться в методах, помеченных @Modifying, для выполнения модифицирующих операций:
#Java #Training #Hard #Spring #SpringDataJPA #Param
Аннотация @Param используется в Spring Data JPA для привязки параметров метода к именованным параметрам в JPQL или нативных SQL-запросах. Она позволяет явно указать, какие аргументы метода должны быть переданы в запрос. Аннотация находится в пакете org.springframework.data.repository.query.
Параметры аннотации
value (обязательный):
Тип: String.
Описание: Указывает имя параметра, которое будет использоваться в запросе. Это имя должно совпадать с именем параметра в запросе, указанном в @Query.
Пример:
@Query("SELECT u FROM User u WHERE u.email = :email")
User findByEmail(@Param("email") String email);
Жизненный цикл аннотации
Инициализация:
Аннотация @Param обрабатывается во время инициализации Spring-контекста. Spring Data JPA анализирует методы репозитория и связывает параметры метода с именованными параметрами в запросе.
Выполнение:
Когда метод репозитория вызывается, Spring Data JPA подставляет значения параметров метода в запрос, используя имена, указанные в @Param.
Уничтожение:
Аннотация не имеет явного жизненного цикла уничтожения, так как она используется только для привязки параметров.
Варианты настройки
Использование в JPQL:
Аннотация @Param используется для привязки параметров в JPQL-запросах:
@Query("SELECT u FROM User u WHERE u.email = :email AND u.age > :age")
User findByEmailAndAge(@Param("email") String email, @Param("age") int age);
Использование в нативных SQL-запросах:
Аннотация @Param также может использоваться в нативных SQL-запросах:
@Query(value = "SELECT * FROM users WHERE email = :email", nativeQuery = true)
User findByEmail(@Param("email") String email);
Использование с @Modifying:
Аннотация @Param может использоваться в методах, помеченных @Modifying, для выполнения модифицирующих операций:
@Modifying
@Query("UPDATE User u SET u.active = :active WHERE u.email = :email")
void updateUserStatus(@Param("email") String email, @Param("active") boolean active);
#Java #Training #Hard #Spring #SpringDataJPA #Param
Что выведет код?
#Tasks
public class Task250325 {
public static void main(String[] args) {
String s1 = "Java";
String s2 = new String("Java");
String s3 = s1.intern();
System.out.println(s1 == s2);
System.out.println(s1 == s3);
}
}
#Tasks
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопросы с собеседования 👩💻
Что делает оператор +=?
Что делает оператор +=?
Anonymous Quiz
6%
Сравнивает два значения
92%
Присваивает и увеличивает значение переменной
0%
Умножает переменную на число
2%
Проверяет условие
Аннотация @Transactional
Аннотация @Transactional используется в Spring для управления транзакциями на уровне методов или классов. Она позволяет декларативно определять границы транзакций, их поведение и настройки. Аннотация находится в пакете org.springframework.transaction.annotation.
Параметры аннотации
value (необязательный):
Тип: String.
Значение по умолчанию: "".
Описание: Указывает имя менеджера транзакций (бина PlatformTransactionManager), который должен использоваться для управления транзакцией. Если не указано, используется менеджер транзакций по умолчанию.
Пример:
propagation (необязательный):
Тип: Propagation.
Значение по умолчанию: Propagation.REQUIRED.
Описание: Определяет поведение распространения транзакции.
Возможные значения:
REQUIRED: Использует текущую транзакцию, если она существует, или создает новую.
REQUIRES_NEW: Всегда создает новую транзакцию, приостанавливая текущую, если она существует.
SUPPORTS: Использует текущую транзакцию, если она существует, но не создает новую.
NOT_SUPPORTED: Выполняет метод вне транзакции, приостанавливая текущую, если она существует.
MANDATORY: Требует наличия активной транзакции, иначе выбрасывает исключение.
NEVER: Запрещает выполнение метода в транзакции, иначе выбрасывает исключение.
NESTED: Создает вложенную транзакцию, если текущая транзакция существует.
Пример:
isolation (необязательный):
Тип: Isolation.
Значение по умолчанию: Isolation.DEFAULT.
Описание: Определяет уровень изоляции транзакции.
Возможные значения:
DEFAULT: Использует уровень изоляции по умолчанию для базы данных.
READ_UNCOMMITTED: Позволяет читать незафиксированные изменения других транзакций.
READ_COMMITTED: Гарантирует, что читаются только зафиксированные данные.
REPEATABLE_READ: Гарантирует, что данные, прочитанные в транзакции, не изменятся другими транзакциями.
SERIALIZABLE: Самый строгий уровень изоляции, предотвращает любые конфликты.
Пример:
timeout (необязательный):
Тип: int.
Значение по умолчанию: -1 (без тайм-аута).
Описание: Указывает максимальное время выполнения транзакции в секундах. Если время превышено, транзакция откатывается.
Пример:
readOnly (необязательный)
Тип: boolean.
Значение по умолчанию: false.
Описание: Указывает, является ли транзакция только для чтения. Если true, это может оптимизировать выполнение запросов.
Пример:
rollbackFor (необязательный):
Тип: Class<? extends Throwable>[].
Значение по умолчанию: {}.
Описание: Указывает типы исключений, при которых транзакция должна быть откачена. По умолчанию откат происходит только для непроверяемых исключений (RuntimeException и его подклассов).
Пример:
noRollbackFor (необязательный):
Тип: Class<? extends Throwable>[].
Значение по умолчанию: {}.
Описание: Указывает типы исключений, при которых транзакция не должна быть откачена.
Пример:
#Java #Training #Hard #Spring #SpringDataJPA #Transactional
Аннотация @Transactional используется в Spring для управления транзакциями на уровне методов или классов. Она позволяет декларативно определять границы транзакций, их поведение и настройки. Аннотация находится в пакете org.springframework.transaction.annotation.
Параметры аннотации
value (необязательный):
Тип: String.
Значение по умолчанию: "".
Описание: Указывает имя менеджера транзакций (бина PlatformTransactionManager), который должен использоваться для управления транзакцией. Если не указано, используется менеджер транзакций по умолчанию.
Пример:
@Transactional("customTransactionManager")
public void performOperation() {
// Логика метода
}
propagation (необязательный):
Тип: Propagation.
Значение по умолчанию: Propagation.REQUIRED.
Описание: Определяет поведение распространения транзакции.
Возможные значения:
REQUIRED: Использует текущую транзакцию, если она существует, или создает новую.
REQUIRES_NEW: Всегда создает новую транзакцию, приостанавливая текущую, если она существует.
SUPPORTS: Использует текущую транзакцию, если она существует, но не создает новую.
NOT_SUPPORTED: Выполняет метод вне транзакции, приостанавливая текущую, если она существует.
MANDATORY: Требует наличия активной транзакции, иначе выбрасывает исключение.
NEVER: Запрещает выполнение метода в транзакции, иначе выбрасывает исключение.
NESTED: Создает вложенную транзакцию, если текущая транзакция существует.
Пример:
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void performOperation() {
// Логика метода
}
isolation (необязательный):
Тип: Isolation.
Значение по умолчанию: Isolation.DEFAULT.
Описание: Определяет уровень изоляции транзакции.
Возможные значения:
DEFAULT: Использует уровень изоляции по умолчанию для базы данных.
READ_UNCOMMITTED: Позволяет читать незафиксированные изменения других транзакций.
READ_COMMITTED: Гарантирует, что читаются только зафиксированные данные.
REPEATABLE_READ: Гарантирует, что данные, прочитанные в транзакции, не изменятся другими транзакциями.
SERIALIZABLE: Самый строгий уровень изоляции, предотвращает любые конфликты.
Пример:
@Transactional(isolation = Isolation.READ_COMMITTED)
public void performOperation() {
// Логика метода
}
timeout (необязательный):
Тип: int.
Значение по умолчанию: -1 (без тайм-аута).
Описание: Указывает максимальное время выполнения транзакции в секундах. Если время превышено, транзакция откатывается.
Пример:
@Transactional(timeout = 10)
public void performOperation() {
// Логика метода
}
readOnly (необязательный)
Тип: boolean.
Значение по умолчанию: false.
Описание: Указывает, является ли транзакция только для чтения. Если true, это может оптимизировать выполнение запросов.
Пример:
@Transactional(readOnly = true)
public void readData() {
// Логика метода
}
rollbackFor (необязательный):
Тип: Class<? extends Throwable>[].
Значение по умолчанию: {}.
Описание: Указывает типы исключений, при которых транзакция должна быть откачена. По умолчанию откат происходит только для непроверяемых исключений (RuntimeException и его подклассов).
Пример:
@Transactional(rollbackFor = {CustomException.class})
public void performOperation() throws CustomException {
// Логика метода
}
noRollbackFor (необязательный):
Тип: Class<? extends Throwable>[].
Значение по умолчанию: {}.
Описание: Указывает типы исключений, при которых транзакция не должна быть откачена.
Пример:
@Transactional(noRollbackFor = {CustomException.class})
public void performOperation() throws CustomException {
// Логика метода
}
#Java #Training #Hard #Spring #SpringDataJPA #Transactional
Жизненный цикл аннотации
Инициализация:
Аннотация @Transactional обрабатывается во время инициализации Spring-контекста. Spring создает прокси-объекты для методов или классов, помеченных @Transactional.
Выполнение:
Когда метод вызывается, Spring проверяет настройки транзакции и начинает новую транзакцию (или использует существующую) в соответствии с параметрами propagation.
Если метод завершается успешно, транзакция фиксируется (commit). Если возникает исключение, транзакция откатывается (rollback), если это указано в параметрах.
Уничтожение:
После завершения метода транзакция завершается (фиксируется или откатывается), и ресурсы освобождаются.
Механизмы Spring и настройки Spring Boot
Spring AOP (Aspect-Oriented Programming):
Spring использует AOP для создания прокси-объектов, которые перехватывают вызовы методов, помеченных @Transactional, и управляют транзакциями.
PlatformTransactionManager:
Spring предоставляет интерфейс PlatformTransactionManager для управления транзакциями. Реализации включают DataSourceTransactionManager (для JDBC) и JpaTransactionManager (для JPA).
TransactionTemplate:
Для программного управления транзакциями можно использовать TransactionTemplate.
Варианты настройки
Использование нескольких менеджеров транзакций:
Если в приложении используется несколько источников данных, можно настроить несколько менеджеров транзакций и указывать их в параметре value аннотации @Transactional.
Программное управление транзакциями:
Для сложных сценариев можно использовать TransactionTemplate:
Использование вложенных транзакций:
Уровень изоляции NESTED позволяет создавать вложенные транзакции, которые могут быть откачены независимо от основной транзакции.
#Java #Training #Hard #Spring #SpringDataJPA #Transactional
Инициализация:
Аннотация @Transactional обрабатывается во время инициализации Spring-контекста. Spring создает прокси-объекты для методов или классов, помеченных @Transactional.
Выполнение:
Когда метод вызывается, Spring проверяет настройки транзакции и начинает новую транзакцию (или использует существующую) в соответствии с параметрами propagation.
Если метод завершается успешно, транзакция фиксируется (commit). Если возникает исключение, транзакция откатывается (rollback), если это указано в параметрах.
Уничтожение:
После завершения метода транзакция завершается (фиксируется или откатывается), и ресурсы освобождаются.
Механизмы Spring и настройки Spring Boot
Spring AOP (Aspect-Oriented Programming):
Spring использует AOP для создания прокси-объектов, которые перехватывают вызовы методов, помеченных @Transactional, и управляют транзакциями.
PlatformTransactionManager:
Spring предоставляет интерфейс PlatformTransactionManager для управления транзакциями. Реализации включают DataSourceTransactionManager (для JDBC) и JpaTransactionManager (для JPA).
TransactionTemplate:
Для программного управления транзакциями можно использовать TransactionTemplate.
Варианты настройки
Использование нескольких менеджеров транзакций:
Если в приложении используется несколько источников данных, можно настроить несколько менеджеров транзакций и указывать их в параметре value аннотации @Transactional.
Программное управление транзакциями:
Для сложных сценариев можно использовать TransactionTemplate:
@Autowired
private TransactionTemplate transactionTemplate;
public void performOperation() {
transactionTemplate.execute(status -> {
// Логика метода
return null;
});
}
Использование вложенных транзакций:
Уровень изоляции NESTED позволяет создавать вложенные транзакции, которые могут быть откачены независимо от основной транзакции.
#Java #Training #Hard #Spring #SpringDataJPA #Transactional
Аннотация @EnableJpaRepositories
Аннотация @EnableJpaRepositories используется в Spring Data JPA для активации репозиториев JPA в приложении. Она сканирует пакеты и регистрирует интерфейсы, расширяющие JpaRepository, как бины Spring. Аннотация находится в пакете org.springframework.data.jpa.repository.config.
Параметры аннотации
basePackages (необязательный):
Тип: String[].
Значение по умолчанию: {}.
Описание: Указывает пакеты, которые должны быть сканированы для поиска репозиториев JPA. Если не указано, используется пакет, в котором находится класс с аннотацией.
Пример:
basePackageClasses (необязательный):
Тип: Class<?>[].
Значение по умолчанию: {}.
Описание: Указывает классы, пакеты которых должны быть сканированы для поиска репозиториев JPA. Это альтернатива basePackages.
Пример:
includeFilters (необязательный):
Тип: ComponentScan.Filter[].
Значение по умолчанию: {}.
Описание: Указывает фильтры для включения определенных классов в сканирование репозиториев.
Пример:
excludeFilters (необязательный):
Тип: ComponentScan.Filter[].
Значение по умолчанию: {}.
Описание: Указывает фильтры для исключения определенных классов из сканирования репозиториев.
Пример:
repositoryImplementationPostfix (необязательный):
Тип: String.
Значение по умолчанию: "Impl".
Описание: Указывает постфикс для классов реализации репозиториев.
Пример:
entityManagerFactoryRef (необязательный):
Тип: String.
Значение по умолчанию: "entityManagerFactory".
Описание: Указывает имя бина EntityManagerFactory, который должен использоваться для репозиториев.
Пример:
transactionManagerRef (необязательный):
Тип: String.
Значение по умолчанию: "transactionManager".
Описание: Указывает имя бина PlatformTransactionManager, который должен использоваться для управления транзакциями репозиториев.
Пример:
considerNestedRepositories (необязательный):
Тип: boolean.
Значение по умолчанию: false.
Описание: Указывает, должны ли сканироваться вложенные репозитории (например, внутри других классов).
Пример:
enableDefaultTransactions (необязательный):
Тип: boolean.
Значение по умолчанию: true.
Описание: Указывает, должны ли методы репозиториев выполняться в транзакции по умолчанию.
Пример:
Жизненный цикл аннотации
Инициализация:
Аннотация @EnableJpaRepositories обрабатывается во время инициализации Spring-контекста. Spring Data JPA сканирует указанные пакеты и регистрирует интерфейсы репозиториев как бины.
Выполнение:
Когда приложение запущено, Spring Data JPA создает прокси-объекты для интерфейсов репозиториев, которые реализуют методы, определенные в JpaRepository и пользовательских запросах.
Уничтожение:
Аннотация не имеет явного жизненного цикла уничтожения, так как она используется только для конфигурации репозиториев.
#Java #Training #Hard #Spring #SpringDataJPA #EnableJpaRepositories
Аннотация @EnableJpaRepositories используется в Spring Data JPA для активации репозиториев JPA в приложении. Она сканирует пакеты и регистрирует интерфейсы, расширяющие JpaRepository, как бины Spring. Аннотация находится в пакете org.springframework.data.jpa.repository.config.
Параметры аннотации
basePackages (необязательный):
Тип: String[].
Значение по умолчанию: {}.
Описание: Указывает пакеты, которые должны быть сканированы для поиска репозиториев JPA. Если не указано, используется пакет, в котором находится класс с аннотацией.
Пример:
@EnableJpaRepositories(basePackages = "com.example.repositories")
basePackageClasses (необязательный):
Тип: Class<?>[].
Значение по умолчанию: {}.
Описание: Указывает классы, пакеты которых должны быть сканированы для поиска репозиториев JPA. Это альтернатива basePackages.
Пример:
@EnableJpaRepositories(basePackageClasses = {UserRepository.class, ProductRepository.class})
includeFilters (необязательный):
Тип: ComponentScan.Filter[].
Значение по умолчанию: {}.
Описание: Указывает фильтры для включения определенных классов в сканирование репозиториев.
Пример:
@EnableJpaRepositories(includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = CustomRepository.class))
excludeFilters (необязательный):
Тип: ComponentScan.Filter[].
Значение по умолчанию: {}.
Описание: Указывает фильтры для исключения определенных классов из сканирования репозиториев.
Пример:
@EnableJpaRepositories(excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = ExcludedRepository.class))
repositoryImplementationPostfix (необязательный):
Тип: String.
Значение по умолчанию: "Impl".
Описание: Указывает постфикс для классов реализации репозиториев.
Пример:
@EnableJpaRepositories(repositoryImplementationPostfix = "CustomImpl")
entityManagerFactoryRef (необязательный):
Тип: String.
Значение по умолчанию: "entityManagerFactory".
Описание: Указывает имя бина EntityManagerFactory, который должен использоваться для репозиториев.
Пример:
@EnableJpaRepositories(entityManagerFactoryRef = "customEntityManagerFactory")
transactionManagerRef (необязательный):
Тип: String.
Значение по умолчанию: "transactionManager".
Описание: Указывает имя бина PlatformTransactionManager, который должен использоваться для управления транзакциями репозиториев.
Пример:
@EnableJpaRepositories(transactionManagerRef = "customTransactionManager")
considerNestedRepositories (необязательный):
Тип: boolean.
Значение по умолчанию: false.
Описание: Указывает, должны ли сканироваться вложенные репозитории (например, внутри других классов).
Пример:
@EnableJpaRepositories(considerNestedRepositories = true)
enableDefaultTransactions (необязательный):
Тип: boolean.
Значение по умолчанию: true.
Описание: Указывает, должны ли методы репозиториев выполняться в транзакции по умолчанию.
Пример:
@EnableJpaRepositories(enableDefaultTransactions = false)
Жизненный цикл аннотации
Инициализация:
Аннотация @EnableJpaRepositories обрабатывается во время инициализации Spring-контекста. Spring Data JPA сканирует указанные пакеты и регистрирует интерфейсы репозиториев как бины.
Выполнение:
Когда приложение запущено, Spring Data JPA создает прокси-объекты для интерфейсов репозиториев, которые реализуют методы, определенные в JpaRepository и пользовательских запросах.
Уничтожение:
Аннотация не имеет явного жизненного цикла уничтожения, так как она используется только для конфигурации репозиториев.
#Java #Training #Hard #Spring #SpringDataJPA #EnableJpaRepositories
Что выведет код?
#Tasks
public class Task260325 {
public static void main(String[] args) {
long x = 10L;
int y = 10;
int z = (int) ((x > y) ? x : y * (x=+3));
System.out.println(z);
}
}
#Tasks
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопросы с собеседования 👩💻
Что такое JRE?
Что такое JRE?
Anonymous Quiz
11%
Среда разработки Java
64%
Среда выполнения Java
11%
Компилятор Java
14%
Библиотека классов
Аннотация @EntityGraph
Аннотация @EntityGraph используется в Spring Data JPA для управления стратегией загрузки связанных сущностей (например, EAGER или LAZY). Она позволяет динамически определять, какие ассоциации должны быть загружены вместе с основной сущностью, что помогает избежать проблемы N+1 запросов. Аннотация находится в пакете org.springframework.data.jpa.repository.EntityGraph.
Параметры аннотации
value (необязательный):
Тип: String.
Значение по умолчанию: "".
Описание: Указывает имя именованного графа сущности (Named EntityGraph), который должен быть использован. Именованный граф должен быть определен в сущности с помощью аннотации @NamedEntityGraph.
Пример:
type (необязательный):
Тип: EntityGraphType.
Значение по умолчанию: EntityGraphType.FETCH.
Описание: Определяет тип графа сущности.
Возможные значения:
FETCH: Загружает только указанные ассоциации.
LOAD: Загружает указанные ассоциации, а остальные загружает в соответствии с их стратегией загрузки (например, LAZY или EAGER).
Пример:
attributePaths (необязательный):
Тип: String[].
Значение по умолчанию: {}.
Описание: Указывает пути к атрибутам сущности, которые должны быть загружены. Это альтернатива использованию именованного графа.
Пример:
Жизненный цикл аннотации
Инициализация:
Аннотация @EntityGraph обрабатывается во время инициализации Spring-контекста. Spring Data JPA анализирует методы репозитория и настраивает графы сущностей.
Выполнение:
Когда метод репозитория вызывается, Spring Data JPA применяет указанный граф сущности к запросу, загружая указанные ассоциации.
Уничтожение:
Аннотация не имеет явного жизненного цикла уничтожения, так как она используется только для конфигурации загрузки сущностей.
Варианты настройки
Использование именованных графов:
Именованные графы сущностей можно определить в сущности с помощью аннотации @NamedEntityGraph:
Использование динамических графов:
Динамические графы можно указать с помощью параметра attributePaths:
Комбинирование с @Query:
Аннотация @EntityGraph может использоваться вместе с @Query для более сложных запросов:
Использование нескольких графов:
Можно указать несколько графов сущностей, если это поддерживается JPA-провайдером.
#Java #Training #Hard #Spring #SpringDataJPA #EntityGraph
Аннотация @EntityGraph используется в Spring Data JPA для управления стратегией загрузки связанных сущностей (например, EAGER или LAZY). Она позволяет динамически определять, какие ассоциации должны быть загружены вместе с основной сущностью, что помогает избежать проблемы N+1 запросов. Аннотация находится в пакете org.springframework.data.jpa.repository.EntityGraph.
Параметры аннотации
value (необязательный):
Тип: String.
Значение по умолчанию: "".
Описание: Указывает имя именованного графа сущности (Named EntityGraph), который должен быть использован. Именованный граф должен быть определен в сущности с помощью аннотации @NamedEntityGraph.
Пример:
@EntityGraph(value = "User.withAddress")
User findById(Long id);
type (необязательный):
Тип: EntityGraphType.
Значение по умолчанию: EntityGraphType.FETCH.
Описание: Определяет тип графа сущности.
Возможные значения:
FETCH: Загружает только указанные ассоциации.
LOAD: Загружает указанные ассоциации, а остальные загружает в соответствии с их стратегией загрузки (например, LAZY или EAGER).
Пример:
@EntityGraph(type = EntityGraphType.LOAD)
User findById(Long id);
attributePaths (необязательный):
Тип: String[].
Значение по умолчанию: {}.
Описание: Указывает пути к атрибутам сущности, которые должны быть загружены. Это альтернатива использованию именованного графа.
Пример:
@EntityGraph(attributePaths = {"address", "orders"})
User findById(Long id);
Жизненный цикл аннотации
Инициализация:
Аннотация @EntityGraph обрабатывается во время инициализации Spring-контекста. Spring Data JPA анализирует методы репозитория и настраивает графы сущностей.
Выполнение:
Когда метод репозитория вызывается, Spring Data JPA применяет указанный граф сущности к запросу, загружая указанные ассоциации.
Уничтожение:
Аннотация не имеет явного жизненного цикла уничтожения, так как она используется только для конфигурации загрузки сущностей.
Варианты настройки
Использование именованных графов:
Именованные графы сущностей можно определить в сущности с помощью аннотации @NamedEntityGraph:
@Entity
@NamedEntityGraph(name = "User.withAddress", attributeNodes = @NamedAttributeNode("address"))
public class User {
// Поля и методы
}
Использование динамических графов:
Динамические графы можно указать с помощью параметра attributePaths:
@EntityGraph(attributePaths = {"address", "orders"})
User findById(Long id);
Комбинирование с @Query:
Аннотация @EntityGraph может использоваться вместе с @Query для более сложных запросов:
@EntityGraph(attributePaths = {"address"})
@Query("SELECT u FROM User u WHERE u.email = :email")
User findByEmail(@Param("email") String email);
Использование нескольких графов:
Можно указать несколько графов сущностей, если это поддерживается JPA-провайдером.
#Java #Training #Hard #Spring #SpringDataJPA #EntityGraph