Hello,
@Transactional annotation doesn't work for an instance provided by a method annotated as @Provides. My situation is as follows. I have two classes in the reproducer. A class named FirstServiceImpl which is depends on SecondServiceImpl. These classes have following methods:
// Method in FirstServiceImpl
@Transactional
public void firstSave(final MyEntity myEntity) {
secondServiceImpl.secondSave(myEntity);
}
// Method in SecondServiceImpl
public void secondSave(final MyEntity myEntity) {
em.persist(myEntity);
}
And FirstService is produced by a method annotated as @Provided:
// Method in MyModule.
@Provides
FirstService provideFirstService(final SecondServiceImpl secondServiceImpl) {
return new FirstServiceImpl(secondServiceImpl);
}
In that situation, I expect transaction will begin on FirstServiceImpl#firstSave() both of following two cases:
(a) Acquire an instance by calling injector.getInstance(FirstService.class)
(b) Acquire an instance by calling injector.getInstance(FirstServiceImpl.class)
But it doesn't work for (a). It looks like that @Transactional doesn't affect for an instance produced by @Provided method. I found a workaround that putting @Transactional to SecondServiceImpl#secondSave() make it work, But unfortunately I can't make it for real code at my job.
Is this behavior by design? Or are there any better workaround?
Thanks.