public interface Service {
void forcedTransactionalMethod();
@Transactional
void questionableTransactionalMethod();
}
public class ImplementedService implements Service {
private DummyDao dao;
public void setDao(DummyDao dao) {
this.dao = dao;
}
@Transactional
public void forcedTransactionalMethod() {
dao.getJdbcTemplate().update("INSERT INTO PERSON (NAME) VALUES ('ME')");
}
public void questionableTransactionalMethod() {
dao.getJdbcTemplate().update("INSERT INTO PERSON (NAME) VALUES ('YOU')");
}
}
0
4
Pozbyć się adnotacji, użyć transactionTemplate skoro już używasz jdbcTemplate albo w ogóle nic nie robić tutaj, bo i tak masz tu jedno query więc transakcja średnio potrzebna.
2
Ale najlepsze podejście to nie używać @Transactional
1
@Transactional to szczegół implementacyjny. Przykładowo - tworzysz implementację taką, że @Transactional jest bez sensu (np. zamiast zabawy po stronie aplikacji przenosisz logikę do bazy danych) - i wtedy zostajesz z tą nieszczęsną transakcją.
2