我使用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管理员检查时 更新DB中的记录。我看到记录已正确更新 但在第3步中它没有反映出来。
用于测试目的。更新记录后我也有一些延迟 在step2但我仍然得到isLost = false
问题: 你能告诉我这里有什么问题吗?
感谢。
答案 0 :(得分:-1)
有时您在插入数据库时不会提交,因此您的select将获取旧数据,因为最后一个事务未提交。