2014-05-14 1 views
1

내 오라클 데이터베이스에 삽입 될 때마다 엔터티 ID가 시퀀스로 자동 생성되도록 트리거를 만들었습니다.시퀀스가없는 오라클의 @GeneratedValue

문제는 Hibernate/JPA에 대한 이러한 엔티티에 주석을 달기와 함께 제공됩니다. @GeneratedValue 주석을 정의해야하지만 시퀀스 이름을 지정하고 싶지는 않습니다. 그렇게하면 Hibernate가 먼저 시퀀스를 쿼리 한 다음 방아쇠로 이미 완료된 작품입니다.

제안한 시나리오로 @GeneratedValue에서이 시퀀스를 건너 뛸 수있는 방법이 있습니까? ID가 제공되지 않으면

예외 내가 얻을 :

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

패턴 클래스 :

어떤 코드에서
@Entity 
@Table(name = "PATTERN") 
public class Patron extends HistoricoAbstractEntity { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    @Id 
    @Column(name = "ID_PATTERN") 
    private Integer idPattern; 

    @Column 
    private String description; 

    @Column(name = "NEGATIVE") 
    private Boolean isNegative; 

    @Column(name = "type") 
    private Integer type; 

    @Column(name = "N_DAYS") 
    private Integer numDays; 
     ... (getters & setters) 

    } 
+0

구현을 사용하여 이미 ID를 생성하는 경우 @GeneratedValue를 사용해야 할 필요가 있는지 알려주십시오. –

+0

ID를 지정하지 않으면, Hibernate는'save' 메소드를 사용할 수 없다고 알려줍니다. –

+0

당신은 id를 지정할 필요가 있지만 @GeneratedValue를 사용할 필요가 없습니다. 당신이 엔티티에서 @Id를 지정하지 않으면 @ Id를 사용하십시오. 그러면 최대 절전 모드가 불평 할 것입니다. –

답변

0

은 은 내가 말할 수있는 것은 그 @GeneratedValue 관련이없는 것입니다, 그것은 최대 절전 모드가 엔티티를 생성하고 idetifier를 책임지는 것을 지정한다. 귀하의 경우에는 귀하의 자아를 생성하므로 수동으로 그 특정 엔티티의 ID를 설정해야합니다. 그런 다음 더 이상이 오류를 얻지는 못합니다. 시도 할 수있는 다른 방법은 @PrePersist를 사용하여이 메서드에 주석을 달고 그 값을 id에 할당 해 봅니다. 나는 이것을 시도하지는 않았지만 이것은이 대답에 따라 잘 작동 할 것이다. 당신의 ID가 데이터베이스에 의해 생성되는 경우

Assign Custom Identifier

당신은 당신 @Id 주석과 함께 귀하의 ID 필드에 @GeneratedValue (전략 = GenerationType.AUTO)를 사용합니다.

+0

ID를 할당 할 수 없습니다.이 ID는 새로운 ID입니다. ID 할당은 데이터베이스 자체에서 수행되므로 개체가 보존 될 때까지 ID를 알 수 없습니다. –

+0

답변을 업데이트했습니다. –

관련 문제