Этот код о некоторых действиях базы данных:Почему не работает аннотация @Transactional?
@Component("trans")
public class CustomerTransactionImp extends JdbcDaoSupport{
public static final Logger logger = Logger.getLogger(CustomerTransactionImp.class.getName());
@Autowired
public CustomerTransactionImp(DataSource dataSource) {
setDataSource(dataSource);
}
@Transactional
public void deleteCustomerByName(String name){
String sql = "DELETE FROM CUSTOMER WHERE firstName = ?";
deleteCustomerByID((long) 100);
displayAllCustomer();
logger.info("Deleted customer named: "+ name);
getJdbcTemplate().update(sql,name);
}
public void deleteCustomerByID(Long ID) {
String sql = "DELETE FROM CUSTOMER WHERE id = ?";
logger.info("Deleted customer named: "+ ID);
getJdbcTemplate().update(sql, ID);
}
public List getAllCustomer(){
String sql = "Select * FROM customer";
return getJdbcTemplate().queryForList(sql);
}
public void displayAllCustomer() {
for (Object o : getAllCustomer()) {
System.out.println(o);
}
}
}
Это мой Spring файл конфигурации:
<context:annotation-config></context:annotation-config>
<context:component-scan base-package="database.transactionmanagement"/>
<jdbc:embedded-database id="dataSource">
<jdbc:script location="sqlfiles/schema.sql"/>
<jdbc:script location="sqlfiles/data.sql"/>
</jdbc:embedded-database>
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<constructor-arg name="dataSource" ref="dataSource"/>
</bean>
</beans>
и мой тестовый класс:
@Test
public void trans_management_test() {
ApplicationContext context = new ClassPathXmlApplicationContext("databaseconf/transaction-conf.xml");
CustomerTransactionImp customerTransactionImp = context.getBean("trans", CustomerTransactionImp.class);
customerTransactionImp.deleteCustomerByName("Omer");
customerTransactionImp.displayAllCustomer();
}
Так основные коды, в код, где я использую annaotation @Transactional
, я создал неправильный SQL-запрос, таблица не моя db-:
String sql = "DELETE FROM CUSTOMERWrong WHERE firstName = ?";
Я имею в виду, в методе deleteCustomerByName
, здесь deleteCustomerByID
метод и этот метод работает отлично и фиксации.
В соответствии с транзакцией метод deleteCustomerByID
не должен фиксироваться, или мое понимание аннотации @Transactional
будет неправильным. SQL-запрос под кодом deleteCustomerByName
неверен, в то время как SQL-запрос под deleteCustomerByID
в порядке, все они не должны совершать ???
попытаться добавить '@ Transactional' в метод deleteCustomerByID – Gospel