2011-05-12 3 views
2

데이터베이스에 이미있는 값에 따라 개체의 사용자 지정 ID를 생성하고 싶습니다. , 나는 @Formula 주석의 생각Annotation과 함께 최대 절전 모드를 사용하는 복합 기본 키

@Entity 
class A { 
    // primary key for table 
    @GeneratedValue 
    @Id 
    private long tableId; 

    // id -> should be generated as (1+ (max id of type 'type')) 
    @Formula("1+(select t.id from mytable t where t.type=type)") 
    private long id; 

    // type 
    private String type; 
}   

: 여기

내 클래스입니다 ...

나는 몇 가지 질문이 그 주제에했다 알고 있지만, 나는 해결책을 알아낼 수 없습니다

java.sql.SQLException: Field 'id' doesn't have a default value

난 :하지만 난

예외를 발생 ... 작동 얻을 수 없다 @Formula이 좋은 해결책인지 확실하지 않습니다 ...

아무도 내가 어떻게 작동하게 할 수 있는지에 대한 단서가 있습니까?

고마워,

답변

0

나는 @PrePersist 주석을 사용하여 내 문제를 해결하려고합니다.

@PrePersist 
private void generateId() { 

    if(id>0){ 
     return; 
    } 
    id=++type.lastChronoId; 
    type.save(); 
} 

마지막으로 만들어진 개체의 인덱스를 포함하는 Type 클래스가 Type으로 수정 된 형식입니다.

1

@Formula(value = "(select t.id+1 from mytable t where t.type=type)") 
private long id; 
+0

이 예외 예외가 수정되었지만 실제로이 주석의 사용법을 잘못 이해했습니다. "id"필드가 더 이상 테이블 열이 아닙니다 ... – Benjamin

관련 문제