java.sql.SQLIntegrityConstraintViolationException:ORA-00001:违反了唯一约束(ONESPEKS.SAM\u SENARAI\u SEMAK\u PK)

java.sql.SQLIntegrityConstraintViolationException:ORA-00001:违反了唯一约束(ONESPEKS.SAM\u SENARAI\u SEMAK\u PK),java,oracle,Java,Oracle,我正在使用JSP、JavaSpring将用户的数据插入数据库。 PK由数据库自动生成。用户输入的数据将插入datagrid,用户将单击“保存”,然后将所有数据(多行/列表)传输到数据库中 public List saveSenaraiSemak(List semak){ JdbcTemplate JdbcTemplate=新的JdbcTemplate(数据源); String insertSQL=“插入SAM\u SENARAI\u SEMAK” +(SAM_JENISURUSNIAGA_PKI

我正在使用JSP、JavaSpring将用户的数据插入数据库。 PK由数据库自动生成。用户输入的数据将插入datagrid,用户将单击“保存”,然后将所有数据(多行/列表)传输到数据库中

public List saveSenaraiSemak(List semak){
JdbcTemplate JdbcTemplate=新的JdbcTemplate(数据源);
String insertSQL=“插入SAM\u SENARAI\u SEMAK”
+(SAM_JENISURUSNIAGA_PKID、KOD、PERIHAL、ID_SIMPAN、TKH_SIMPAN、ID_SAH_SIMPAN、TKH_SAH_SIMPAN、KOD_STATUS_TRANSAKSI_PKID、STATUS FL)
+“值(?,,,,,,,,,,,,,,,?)”;
batchUpdate(insertSQL,新的BatchPreparedStatementSetter()){
@凌驾
public void setValues(PreparedStatement PreparedStatement,int i)引发SQLException{
试一试{
samsenaraisemaksam=semak.get(i);
preparedStatement.setLong(1,sam.getJenis_urusniaga()!=null?sam.getJenis_urusniaga():0);
preparedStatement.setString(2,sam.getKod()!=null?sam.getKod():“”);
preparedStatement.setString(3,sam.getPerihal()!=null?sam.getPerihal():“”);
preparedStatement.setLong(4,sam.getIdSimpan()!=null?sam.getIdSimpan():0);
preparedStatement.setDate(5,sam.getTarikhSimpan());
preparedStatement.setLong(6,sam.getIdSahsimpan()!=null?sam.getIdSahsimpan():0);
preparedStatement.setDate(7,sam.getTarikhSahsimpan());
preparedStatement.setLong(8,sam.getKodStatusTransaksiPkid()!=null?sam.getKodStatusTransaksiPkid():0);
preparedStatement.setInt(9,sam.getStatusFL()!=0?sam.getStatusFL():0);
}捕获(例外e){
System.out.println(e.getMessage());
}
}
@凌驾
public int getBatchSize(){
返回semak.size();
}
});
返回semak;
}
主键(自动生成的主键)是数据库中的第一列。
SAM_JENISURUSNIAGA_PKID位于第二列。

如果主键是自动生成的,为什么需要这个<代码>preparedStatement.setLong(1,sam.getJenis_urusniaga()!=null?sam.getJenis_urusniaga():0)它是唯一的密钥。PK是sam.getPkid()