2017-12-06 4 views
1

내 스프링 데이터 (JPA/Hibernate) 기반 응용 프로그램은 Postgres에서 새로운 엔터티를 유지할 때 증가 된로드를 발생시킵니다. org.postgresql.util.PSQLException : ERROR : 그러나,중복 키 값이 Postgres의 고유 제한 "hibernate_sequences_pkey"예외를 위반합니다.

@Id 
@GeneratedValue(strategy = GenerationType.TABLE) 
@Column(name = "ID") 
public Long getId() { 
    return id; 
} 

나는이 전략은 Postgres를위한 완벽한 솔루션 아니라는 것을 알고 그것은 이유입니다 : 키 값을 복제하는 것은 고유 제한 조건 "hibernate_sequences_pkey"다음과 같이 ID에 대한 전략이 정의

을 위반 예외?

로드는 여러 스레드에서 병렬로 실행되는 스플리터 삽입과 함께 Apache Camel 경로를 사용하여 생성됩니다.

답변

1

일부 테스트를 마친 후에는 실제로 문제가 strategy = GenerationType.TABLE에 의해 발생한 것으로 보입니다. strategy = GenerationType.SEQUENCE으로 변경되면 중복 된 키를 사용하여 위에서 설명한 문제가 사라졌습니다.

@Id 
@SequenceGenerator(name = Consts.VEHICLE_ATTR_ID_SEQ, 
     sequenceName = Consts.VEHICLE_ATTR_ID_SEQ, 
     allocationSize = 1) 
@GeneratedValue(strategy = GenerationType.SEQUENCE, 
     generator = Consts.VEHICLE_ATTR_ID_SEQ) 
@Column(name = "ID", updatable = false) 
public Long getId() { 
    return id; 
}