JPA中使用序列的约束违例异常

时间:2018-11-21 11:16:41

标签: java oracle hibernate jpa spring-data-jpa

我在我的项目中使用Spring Data,并在实体和表之间使用JPA进行映射, 这是我的实体

public class daoTable {

@Id
@SequenceGenerator(name = "seq_table_nc", sequenceName = "SEQ_TABLE_NC")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_table_nc")
private Long id;
// setter && getter && outher params
}

这是我的仓库

public interface daoTable Repository extends JpaRepository<daoTable , Long>, JpaSpecificationExecutor<daoTable >{}

当我尝试保存时,出现此问题:

  1. org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [GQAO.PK_RT]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement
  2. java.sql.SQLIntegrityConstraintViolationException: ORA-00001: violation de contrainte unique

1 个答案:

答案 0 :(得分:0)

如果数据库中已经有与SequenceGenerator相同值的记录,就会发生这种情况。

例如,如果我保存1条记录而不使用此SequenceGeneratorseq_table_nc),然后将其添加到代码SequenceGeneratorseq_table_nc)中,然后尝试保存我将会得到您所拥有的异常,因为生成器可以给我的值等于我在数据库中已经拥有的值。

通常,您应检查尝试将哪个值保存在id的DB中。之后,您必须查看如何更新数据库SequenceGenerator,以便它开始生成唯一值。

祝你好运!