我试图使用spring jdbc模板和事务方法将记录插入到不同的表中但不能这样做。
代码看起来像.............
@Transactional
public void insertIntoTwoTables(){
final KeyHolder keyHolder = new GeneratedKeyHolder();
insertRole(keyHolder);
final String person = "insert into person (first_name, last_name, description, role_id) values ('?,?,?,?)";
keyHolder.getKey().longValue();
jdbcTemplate.update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection con)
throws SQLException {
PreparedStatement ps = con.prepareStatement(person);
ps.setObject(1, "sahil");
ps.setObject(2, "Goyal");
ps.setObject(3, "This is again test");
ps.setObject(4, keyHolder.getKey().longValue());
return ps;
}
});
}
private KeyHolder insertRole(KeyHolder keyHolder){
final String role = "insert into role (name, code) values (?,?)";
jdbcTemplate.update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection con)
throws SQLException {
PreparedStatement ps = con.prepareStatement(role, new String[]{"id"});
ps.setObject(1, "Manager");
ps.setObject(2, "MANAGER");
return ps;
}
}, keyHolder);
return keyHolder;
}
当我运行此代码时,它运行完全正常,但不会在数据库中插入任何内容。 当我使用@Transactional注释运行它时会发生此问题。如果我删除然后它工作正常。所以我可以在交易环境中完成这项任务。
配置文件如下所示
<bean id="bDataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="org.postgresql.Driver" />
<property name="username" value="postgres" />
<property name="password" value="postgres" />
<property name="url" value="jdbc:postgresql://localhost:5432/test" />
<property name="defaultAutoCommit" value="true" />
</bean>
我在两种情况下测试代码
但它不会在数据库中嵌入任何内容。