jdbcTemplate调用带数组参数存储过程,事务注解失效无法回滚如何解决
用如下这种方式调用带数组参数存储过程,@Transactional 事务注解会失效,报异常都无法回滚,如何解决?
public List<TestObjectResponse> getContractRepaymentList(List<TestObject> list) {
26.
27. return jdbcTemplate.execute(new CallableStatementCreator() {
28.
29. @Override
30. public CallableStatement createCallableStatement(Connection con) throws SQLException {
31.
32. if (con.isWrapperFor(OracleConnection.class)) {
33. con = con.unwrap(OracleConnection.class);
34. }
35.
36. String callProcedure = "{call PROC_DD_GETPERSONINFO(?,?)}";
37. CallableStatement cs = con.prepareCall(callProcedure);
38. ARRAY array = getArray(list, con);
39.
40. cs.setArray(1, array);
41. cs.registerOutParameter(2, OracleTypes.CURSOR);
42.
43. return cs;
44. }
45.
46. }, new CallableStatementCallback<List<TestObjectResponse>>() {
47.
48. @Override
49. public List<TestObjectResponse> doInCallableStatement(CallableStatement cs)
50. throws SQLException, DataAccessException {
51.
52. List<TestObjectResponse> list = new ArrayList<>();
53.
54. cs.execute();
[java] view plain copy
01.<span style="white-space: pre;"> </span>// 得到返回的cursor
[java] view plain copy
01. ResultSet rs = (ResultSet) cs.getObject(2);
02. while (rs.next()) {
03. TestObjectResponse response = new TestObjectResponse();
04. // 组装你的bean
05. list.add(response);
06. }
07. return list;
08. }
09. });
10. }
11.}