Spring-JPA数据保存实体UNIQUE INDEX(两列,而不是pk)违反了不能抛出异常

时间:2017-10-23 10:40:49

标签: java spring spring-data-jpa unique-constraint

我的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)

1 个答案:

答案 0 :(得分:0)

您提供的第二次保存数据违反了数据库的PK和/或UK规则。

您必须提供符合PK和/或UK(唯一密钥)规则的有效数据,以便在代码中保留DB。