使用Postgres的Spring JPA-从一开始就重置了ID生成

时间:2019-01-13 19:01:21

标签: java postgresql jpa

我正在使用以下代码将实体持久保存到Postgres:

@Entity
public class TwEvent {

    @Id
    @GeneratedValue
    private Long id;

    private String type;
}



@Repository
public class TwEventDAO {

   @Autowired
   private TwEventRepo repo;

   public void save(TwEvent twEvent) {
     repo.save(twEvent);
   }
}


public interface TwEventRepo extends JpaRepository<TwEvent,Long>{

}

它可以处理约30.000条记录,但是当我今天启动我的应用程序时,出现了SQL错误:

2019-01-13 19:57:48:432 WARN  http-nio-8081-exec-4 o.h.e.j.s.SqlExceptionHelper:127 - SQL Error: 0, SQLState: 23505
2019-01-13 19:57:48:432 ERROR http-nio-8081-exec-4 o.h.e.j.s.SqlExceptionHelper:129 - ERROR: duplicate key value violates unique constraint "tw_event_pkey"
  Detail: Key (id)=(34) already exists.
2019-01-13 19:57:48:434 INFO  http-nio-8081-exec-4 o.h.e.j.b.i.AbstractBatchImpl:193 - HHH000010: On release of batch it still contained JDBC statements

就像Postgres一样,从头开始生成ID,而忽略了已经存在的记录。重新启动没有帮助,也没有使用EntityManager。 应用程序可以与新的干净数据库一起正常工作。任何有关如何修复数据库的想法 正确的ID?

已解决:

创建表tw_event2作为表tw_event;

然后我删除了原始表,并将副本重命名为tw_event。之后,下一个ID就是预期的last + 1。无需更改代码。不知道是什么导致了这个错误

1 个答案:

答案 0 :(得分:1)

如果您当然不使用序列,最好指定类似@GeneratedValue(strategy = GenerationType.IDENTITY)的策略,否则应放置@GeneratedValue(strategy = GenerationType.SEQUENCE),以确保用于生成ID的策略始终相同。< / p>