2017-12-26 36 views
1

제 애플리케이션에서 PostgreSQL과 함께 String 데이터 JPA를 사용하고 있습니다. 그리고 응용 프로그램의 모든 엔티티에 대해 순전히 데이터베이스 측에서 ID를 생성하는 방법을 찾고 있습니다.스프링 데이터 JPA는 생성하기 전에 데이터베이스 측에서만 ID를 생성합니다.

따라서, 예를 들어, 여기 내 현재 작업 버전 : 나는 동일한 데이터베이스로 작동합니다 응용 프로그램의 여러 인스턴스를해야하기 때문에

@Entity 
@Table(name = "permissions") 
public class PermissionEntity { 

    @Id 
    @SequenceGenerator(name="permSeq", sequenceName="perm_id_seq", allocationSize = 1) 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="permSeq") 
    private Short id; 

    ........... 
} 

나는, 충돌을 피하기 위해 allocationSize = 1을 사용하고 있습니다.

그러나이 경우에는 permission을 만들 때마다 응용 프로그램에서 데이터베이스 perm_id_seq 시퀀스에 다음 값을 받기를 요청합니다. idjdbc template의 경우와 같이 데이터베이스 측에만 작성하고 싶습니다. 명확한 이유

org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save() 

이유 :

@Entity 
@Table(name = "permissions") 
public class PermissionEntity { 

    @Id 
    private Short id; 

    ........... 
} 

이 지금은 내가 엔티티를 저장하기 위해 노력하고있어 예외를 throw : 나는 id = nextval('perm_id_seq'::regclass)에 대한 기본 값을 설정하고 내 코드를 수정할 것을해야 할 일 나를 위해. 하지만, 누군가가 말해 줄 수 있습니다, 내가 가능한 한 데이터베이스 측면에 id을 생성 할 수 있습니까? 당신의 ID에 대한

답변

3

사용 GenerationType.IDENTITY,이 식별 컬럼의 ID가 DB 측에서 생성됩니다 최대 절전 모드 말할 ​​것이다 :

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private Short id; 
+0

대단히 감사합니다! 잘 작동합니다. –