복붙노트

[SPRING] Hibernate에서 프라이 머리 키 생성을 위해 사용 된 카운터를 수동으로 업데이트 하시겠습니까?

SPRING

Hibernate에서 프라이 머리 키 생성을 위해 사용 된 카운터를 수동으로 업데이트 하시겠습니까?

내 봄 프로젝트에서 데이터베이스의 테이블은 Hibernate에서 엔티티 클래스를 기반으로 자동으로 생성되지만 테이블에 수동으로 일부 기본값을 삽입합니다 (pgAdmin3 사용).

왜냐하면, 나는 지금이 문제에 직면하고있다. 이미 가치가있는 테이블 중 하나에서 Java 코드를 통해 값을 삽입하려고하면 기본 키가 이미 데이터베이스에 있다는 오류 메시지가 나타난다.

누구든지이 문제를 해결하는 방법을 알고 있습니까?

최신 정보

그것이 내 수업에서 기본 키를 선언하는 방법입니다.

@Id
@Column(name = "id")
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;

해결법

  1. ==============================

    1.테이블 당 한 번이 SQL 쿼리를 호출하여 시퀀스를 다음 빈 번호로 설정합니다.

    테이블 당 한 번이 SQL 쿼리를 호출하여 시퀀스를 다음 빈 번호로 설정합니다.

    SELECT setval('tblname_id_seq', max(id)) FROM tblname;
    

    tblname은 테이블의 실제 이름입니다.

    Hibernate는 다른 명명 규칙을 사용하거나 시퀀스의 이름이 변경되었을 수 있습니다. 직렬 열 뒤의 시퀀스를 찾을 수없는 경우 다음을 확인하십시오 (설명서 별).

    SELECT pg_get_serial_sequence(tblname, column_name)
    

    자세한 내용은: Django AutoField 시작 값 수정 이미 ID가 할당 된 postgresql로 CSV를 가져 오는 방법은 무엇입니까?

  2. ==============================

    2.여기서 문제는 ID를 래퍼 대신 프리미티브로 선언하는 것일 수 있습니다.

    여기서 문제는 ID를 래퍼 대신 프리미티브로 선언하는 것일 수 있습니다.

    그래서 대신 :

    private int id;
    

    당신은해야한다 :

    private Integer id;
    

    ID를 사용하여 엔티티를 생성하면 NULL 대신 NULL로 초기화됩니다.

    그렇기 때문에 중복 된 id 제약 조건 위반 예외가 발생합니다.

    id가 NULL 일 때만 AUTO 생성 전략은 id 할당을 데이터베이스에 위임합니다.

  3. from https://stackoverflow.com/questions/23818345/manually-update-the-counter-used-for-generation-of-primary-key-in-hibernate by cc-by-sa and MIT license