@Transactional в @Repository при использовании CGLIB

Использую
org.springframework.boot' version '3.2.1' и 'io.spring.dependency-management' version '1.1.4'

Создал приложение, в котором будут использоваться транзакции. Причем собираюсь использовать не стандартную реализацию interfase-base-proxy, а CGLIB. Для этого указываю аннотацию EnableTransactionManagement(proxyTargetClass = true).

@SpringBootApplication
@EnableTransactionManagement(proxyTargetClass = true)
public class TestApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }

}

Так же устанавливаю в application.yaml

Spring.aop.proxy-target-class: true

Далее создаю репозитории, методы которого будут выполняться в транзакции.

import org.springframework.transaction.annotation.Transactional;

    @Repository
    @Transactional
    public interface TestDAO extends CrudRepository<TestEntity, UUID> {
    }

Далее в коде вызываю testDAO.findAll();

Я ожидаю, что транзакция работать не будет т.к. я аннотировал @Transactional интерфейс, а не метод класса. Но транзакция создается. То что она создается я сужу по логам, которые имею после добавления в application.yaml

logging:
  level:
    org.springframework.orm.jpa: DEBUG
    org.springframework.transaction: DEBUG 


2024-01-20T23:03:29.478+03:00 DEBUG 36908 --- [nio-8080-exec-1] o.s.orm.jpa.JpaTransactionManager        : Creating new transaction with name [org.springframework.data.jpa.repository.support.SimpleJpaRepository.findAll]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly
2024-01-20T23:03:29.482+03:00 DEBUG 36908 --- [nio-8080-exec-1] o.s.orm.jpa.JpaTransactionManager        : Exposing JPA transaction as JDBC [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@60951946]
2024-01-20T23:03:29.572+03:00 DEBUG 36908 --- [nio-8080-exec-1] o.s.orm.jpa.JpaTransactionManager        : Initiating transaction commit
2024-01-20T23:03:29.573+03:00 DEBUG 36908 --- [nio-8080-exec-1] o.s.orm.jpa.JpaTransactionManager        : Committing JPA transaction on EntityManager [SessionImpl(1849648678<open>)]

Правильно ли я понимаю, что транзакция все же была создана и почему она создана, ведь я использовал CGLIB и аннотировал интерфейс а не класс?


Ответы (0 шт):