这个问题在几年前被问过,但答案对我不起作用。我已将建议的注释添加到配置和dao中。我确信模板实际上是连接到数据库,因为当我的列太小时我遇到了适当的错误。更新调用正在执行单行插入,它返回1,没有异常。然而,当我检查数据库时,其中没有数据。
任何帮助,将不胜感激。
配置:
@Configuration
@EnableTransactionManagement
@ComponentScan("com.XXX.query.repository")
public class SqlConfig {
@Autowired
private Environment env;
@Bean
public DataSource getDatasource() {
DriverManagerDataSource datasource = new DriverManagerDataSource();
datasource.setDriverClassName(env.getProperty("sql-datasource.driverClassName"));
datasource.setUrl(env.getProperty("sql-datasource.url"));
datasource.setUsername(env.getProperty("sql-datasource.username"));
datasource.setPassword(env.getProperty("sql-datasource.password"));
return datasource;
}
@Bean
public JdbcTemplate jdbcTemplate() {
return new JdbcTemplate(getDatasource());
}
DAO:
@Repository
public class SqlRepositoryImpl implements SqlRepository {
@Autowired
private JdbcTemplate template;
<snip>
@Transactional
@Override
public void addOrder(String foo, String bar, String bat, String cat) {
int i;
try {
// we may already have this data
System.out.println("here");
i = template.update(
"insert into someTable "
+ "(A, B, C, D)"
+ " values (?,?,?,?)",
foo, bar, bat, cat);
} catch (DataAccessException ex) {
checkForDupeKey(ex);
}
<snip>
该地区出现了一个愚蠢的错误,即抛出异常并解除了交易。出于某种原因,异常从未冒泡到表面,所以直到我一次遍历一行,我才意识到这一点。我为浪费人们的时间而道歉。