我的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中。

10-08 08:53