У меня есть 2 вопроса, на которые я не могу найти ответы для них относительно @Transactional:
1- @Transnational по интерфейсу
согласно ответам:
Если выустановите для вашего приложения значение proxy-target-class = 'true' (в контексте вашего приложения ваша @Transactional информация не будет получена, если вы аннотируете интерфейс.
Я настроил мои application.propertiesс помощью:
spring.aop.proxy-target-class=true
и аннотации на интерфейсе все еще подобраны, я пробовал также следующее (proxyTargetClass = true
на EnableTransacationManagement
):
@SpringBootApplication
@EnableAsync
@EnableTransactionManagement(proxyTargetClass = true)
public class Application extends SpringBootServletInitializer {
}
все еще @Transnational являетсяработая там, где я настраиваю только интерфейс, так чего мне здесь не хватает?
2- @Transnational имеет @Inherited, @inherited согласно документу java:
Обратите внимание, чтоэтот тип метааннотации не действует, если аннотированный тип используется для аннотирования чего-либо, кроме класса. Также обратите внимание, что эта метааннотация только приводит к тому, что аннотации наследуются только от суперклассов;интерфейсы не имеют никакого эффекта.
У меня есть следующий интерфейс, аннотированный @Transnational, и он все еще работает с интерфейсами, расширяющими его:
@Repository
@Transactional
public interface UserRepository extends JpaRepository<User, Long> {
}
Следующий / ниже интерфейс имеет модифицирующий запростам, где он не будет работать без @Transactional, я аннотировал интерфейс выше с помощью @Transacational, и его подбирают (он даже работает, если я настраиваю на родительские методы вместо класса):
public interface TestRepository extends UserRepository {
@Query("UPDATE User U set U.name='hello' where U.id=1")
@Modifying
public void test();
}
Так как же работала транзакция, если @Inherited не влияет на интерфейс?
Обновление: для вопроса 1
Я дажепробовал @Async на методе интерфейса, и он работал без аннотирования класса реализации, AOP работает с прокси CGLIB (только при аннотировании методов интерфейса), это противоречит большинству ответов, которые не уверены, что что-то не так.