这个问题是几年前提出的,但是答案对我不起作用。我已经将建议的注释添加到配置和dao中。我敢肯定,Template实际上是在连接数据库,因为当列太小时出现适当的错误。 update调用正在执行单行插入,并且返回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>
答案 0 :(得分:0)
该地区发生了一个愚蠢的错误,引发了异常并取消了交易。由于某种原因,异常从未冒出表面,因此直到我一次只完成一行之后,我才意识到这一点。我为浪费人们的时间而道歉。