我在REST Webservice的数据访问对象实现代码中有以下语句。 Hibernate也参与其中。
private void createNewHistory(EmployeeHistory history_) throws DaoException
{
DataSource ds;
Connection conn = null;
PreparedStatement ps = null;
java.util.Date now = new java.util.Date();
java.sql.Date sqlNow = new java.sql.Date(now.getTime());
try {
ds = jdbcTemplate.getDataSource();
conn = ds.getConnection();
// Generate the query
StringBuilder sql = new StringBuilder();
sql.append("INSERT INTO EMPLOYEE_HISTORY (");
sql.append("EMPLOYEE_ID, ");
sql.append("COMPANY_ID, ");
sql.append("PREVIOUS_STATUS_ID, ");
sql.append("CURRENT_STATUS_ID, ");
sql.append("CHANGE_DATE, ");
sql.append("CHANGER_ID, ");
sql.append("EMPLOYEE_STATUS_CHANGE_COMMENT, ");
sql.append("PREV_REVIEW_STATUS_ID, ");
sql.append("CUR_REVIEW_STATUS_ID, ");
sql.append("COMPANY_STATUS_CHANGE_COMMENT ");
sql.append(") VALUES (");
sql.append("?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ");
ps = conn.prepareStatement(sql.toString());
ps.setInt(1, history_.getEMPLOYEEId());
ps.setInt(2, history_.getCompanyId());
ps.setInt(3, history_.getPreviousStatusId());
ps.setInt(4, history_.getCurrentStatusId());
ps.setDate(5, sqlNow);
ps.setInt(6, history_.getChangerId());
ps.setString(7, history_.getEMPLOYEEStatusChangeComment());
ps.setInt(8, history_.getPrevReviewStatusId());
ps.setInt(9, history_.getCurReviewStatusId());
ps.setString(10, history_.getCOMPANYStatusChangeComment());
... so on and so forth....
我实际上担心在表格中最近两行处理PREVIOUS_STATUS_ID
和CURRENT_STATUS_ID
。
比如说两行中的最新数据如下所示(仅考虑上面两个ID)
数据场景#1
PREVIOUS_STATUS_ID | CURRENT_STATUS_ID
0 | 1001
0 | 1001
因此,当我运行上述查询时,基于当前场景的数据库中的第三条记录将如下插入:
数据场景#2:
PREVIOUS_STATUS_ID | CURRENT_STATUS_ID
0 | 1001
0 | 1001
0 | 1001
是否可以确保PREVIOUS_STATUS_ID看起来像以下(1001)而不是上面的那个,它只是下面一行的副本:
数据场景#3:
PREVIOUS_STATUS_ID | CURRENT_STATUS_ID
1001 | 1001
0 | 1001
0 | 1001
我假设这将涉及上述代码中围绕这两行的一些if-else语句?
ps.setInt(3, history_.getPreviousStatusId());
ps.setInt(4, history_.getCurrentStatusId());
编辑(更多说明):
考虑到Data Scenario #1
,我们可以看到常规模式已经建立,其中第一列始终获得0
值,第二列
始终获得1001
值。
同样在Data Scenario #2
中,我们可以看到具有三行的相同模式。
每次第一列获得0
而第二列获得1001
时,我不想使用相同的模式,而是希望有一个像
Data Scenario#3
中显示的一个,我想将最近记录的Previous_status_ID
设置为与Current_Status_ID
相同的值,
在我的情况下是1001
。
因为稍后在我的代码中的某个地方,我想使用像WHERE Previous_status_ID != Current_Status_ID
这样的WHERE子句在我的代码中进行比较,并希望基于此来过滤记录。