2016-11-16 6 views
2

엔티티의 생성 ID에 대해 응용 프로그램은 트리거를 사용합니다. 그래서, 기관에 생성 된 값을 할당하는 우리는이 같은 구조를 사용최대 절전 모드 엔티티의 Composite @NaturalId

@Id 
@Column(name = "INVOICE_ID") 
@GeneratedValue(generator = "trigger") 
@GenericGenerator(name = "trigger", strategy = "org.hibernate.id.SelectGenerator") 
private Long invoiceId; 

@Column(name = "INVOICE_AMOUNT") 
@NaturalId(mutable = true) 
private Double invoiceAmount; 

SelectorGenerator는해야이 (논리적으로) 고유 한 값을 가지고 몇 가지 필드에 대한 @NaturalId를 사용해야합니다. 그러나 일부 테이블에는 모든 고유 값을 가진 필드가 없습니다. SelectGenerator은 여러 자연 ID를 지원하지 않습니다. 이 상황을 어떻게 극복 할 수 있습니까?

답변

0

이와 같은 경우를 위해 가능한 해결책으로 엔티티 ID를 가져 오는 메커니즘이 약간 변경되었습니다. 대신

@GenericGenerator(name = "trigger", strategy ="org.hibernate.id.SelectGenerator")

을 사용하는 우리는 @NaturalId을 requre하지 않는 데이터베이스 시퀀스 생성기

@Id 
@Column(name = "INVOICE_ID") 
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "invoice_id_seq") 
@SequenceGenerator(name = "invoice_id_seq", sequenceName = "INVOICE_ID_SEQ") 
private Long invoiceId; 

를 사용하여 선호하고 우리의 문제를 해결했다.