我试图用同样的方法做两个JdbcTemplate更新,但只执行第一个。如何在一个方法中执行两个更新语句? EduId和timeId返回正确的值,我猜SQL语法是有效的,所以问题不存在。
编辑:我正在使用MySQL。@Transactional(propagation=Propagation.REQUIRED, isolation=Isolation.SERIALIZABLE, readOnly=false)
public void moveEdu(int eduId, int timeId) {
final String sql = "UPDATE timeslot ts"
+ " INNER JOIN eduevent ee ON ts.edu_id = ee.edu_id"
+ " SET ts.edu_id = null"
+ " WHERE ts.edu_id = ?;";
Object[] parameters = new Object[] {eduId};
final String sql2 = "UPDATE timeslot ts"
+ " INNER JOIN eduevent ee ON ts.edu_id = ee.edu_id"
+ " SET ts.edu_id = ?"
+ " WHERE ts.time_id = ?;";
Object[] parameters2 = new Object[] {eduId, timeId};
jdbcTemplate.update(sql, parameters);
jdbcTemplate.update(sql2, parameters2);
}
答案 0 :(得分:0)
你的代码看起来很好。 您可以尝试在一个
中完成所有更新...
SET ts.edu_id=CASE
WHEN ts.time_id=? THEN ? <-- time_id=timeID then eduID
ELSE null
END
WHERE ts.time_id = ? OR ts.edu_id = ?
和params应该是
Object[] parameters = new Object[] {timeId, eduId, timeId, eduId};
答案 1 :(得分:0)
我通过从SQL2字符串中删除“INNER JOIN”解决了这个问题。