@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 и аннотировал интерфейс а не класс?