我正在使用spring Jdbc进行postgres db的数据库操作。
我收到正在处理的连续通知。
在上面的第3步中,我从DB那里获得了我希望调用Lost为真的记录,但没有获得我在第2步中所做的更新值。
注意:事件由推送事件的单个线程发送。因此所有事件都是按顺序发生的。
public void processEvent(EventData event){
if(event.new){
dao.add(entity)
}else if(event.ISLOST){
entity = dao.getEventById(event.id);
entity.setLost(true); // setting isLost to true
dao.update(entity);
}else if(event.COMPLETED){
entity = dao.getEventById(event.id);
logger.info("is Lost:"+ event.isLost()) // it returns false. Viz its set to true in stp2
dao.update(entity); //error as isLost is overwritten here.
}
}
DAO代码:
@Override
public long registerEvent(final Event callEvent) {
KeyHolder keyHolder = new GeneratedKeyHolder();
int row = getJdbcTemplate().update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection connection)
throws SQLException {
PreparedStatement ps = connection.prepareStatement(QueryDefinitions.REGISTER_EVENT_QUERY,Statement.RETURN_GENERATED_KEYS);
ps.setLong(1,callEvent.getCategoryID());
ps.setBoolean(2,callEvent.isLost() );
ps.setBoolean(3,callEvent.isCompleted() );
return ps;
}
},keyHolder);
long generatedRowId = (long)keyHolder.getKeys().get("callregisterid");
return generatedRowId;
}
其他意见:
当我在dao之后的调试过程中从Postgres管理员检查时更新数据库中的记录。我看到记录已正确更新但在第3步中,它没有反映出来。
用于测试目的。更新记录后,我还拖了一些时间在step2中,但我仍然得到isLost = false
问题:您能建议这里有什么问题吗?
有时,当您插入数据库时,您不会提交,因此您的选择将获得旧数据,因为上一次事务未提交。