如果变量flag 为空 ,那么executeUpdate 后面的参数 bookCollect.getFlag() 就会被executeUpdate()方法忽略掉,程序会报错。
String addSql = "INSERT INTO BOOK_COLLECT(ADD_DATE,STATUS,DEPARTID,FLAG) VALUES(?,?,?,?)";
session.executeUpdate(addSql.toString(), new Object[]{bookCollect.getAddDate(), bookCollect.getStatus(), bookCollect.getFlag(), bookCollect.getDepartId()});
解决方案:根据参数是否为空进行不同的sql拼接,然后再执行sql。感觉此处jdbc没有jpa智能。
addSql.append("INSERT INTO BOOK_COLLECT(DOCLIB_ID,DOC_ID,ADD_USER_NAME,ADD_DATE,STATUS,FLAG");
if (null != list.get(0).getDepartId()) {
addSql.append(",DEPARTID)").append(" VALUES(?,?,?,?,?,?,?)");