我的java代码是这样的:
public class Monitorlog{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
int id;//pk
String sn; // unique constraints(sn,checkpoint)
String checkpoint;
}
public interface MonitorlogDao extends JpaRepository<Monitorlog, Integer>{}
@Service
public class MonitorlogService{
@Autowired
MonitorlogDao monitorlogDao;
public MonitorlogDao getMonitorlog(){
return monitorlogDao;
}
}
测试是这样的:
public void testMonitorlogSerivce(){
Monitorlog m = new Monitorlog();
m.setSn("aa");
m.setCheckpoint("bb");
monitorlogService.getMonitorlogDao().save(m);
m = new Monitorlog();
m.setSn("aa");
m.setCheckpoint("bb");
// SQL insert failed here
try{
monitorlogService.getMonitorlogDao().save(m);
}catch(Exception e){
log("",e);
}
}
secode save(m)失败,它想抛出一个异常,但不是。
m.getId()为0,但是没有捕获到异常,为什么?
我使用sprint boot ver 2.0.0M。
唯一索引
CREATE UNIQUE INDEX [IND_IDNO_POSITIONKIND_CHECKPOINT_1] ON
[dbo].[MONITORLOG] ([CHECKPOINT] DESC, [SN] ASC)
WITH (IGNORE_DUP_KEY = ON)
最佳答案
您在第二次保存时提供的数据违反了数据库的PK和/或UK规则。
始终必须提供符合PK和/或UK(唯一密钥)规则的有效数据,才能将其持久保存在DB中。