2013-06-10 2 views
0

우리 응용 프로그램에는 여러 항목이 있으며 MySQL 데이터베이스로 개발되었습니다. 모든 엔티티 extends은 공통 기본 엔티티입니다.Oracle 데이터베이스의 고유 일련 번호를 생성하는 방법

@MappedSuperclass 
public class BaseEntityData implements Serializable 
{ 
    /** 
    * Data identifier (Usually holds Primary Key) 
    */ 
    private Long id; 

    /** 
    * @return the id 
    */ 
    @Id 
    @GeneratedValue(strategy= GenerationType.AUTO) 
    public Long getId() 
    { 
     return id; 
    } 

    /** 
    * @param value the id to set 
    */ 
    public void setId(final Long value) 
    { 
     this.id = value; 
    } 
} 

우리의 모든 기관은 BaseEntityData 확장하고 모든 MySQL 데이터베이스에 완벽하게 일했다. 우리는 개발 중에 Oracle database에서 테스트하기 위해 경계하지 않았다. 이제 다른 클라이언트 요구 사항의 Oracle database에 테스트하려고하지만 Oracle database은 기본 키의 일련 번호를 생성하지 않으며 때때로 중복 키를 생성하지 않습니다. 모든 수퍼 테이블에 대해 고유 한 키를 생성하려면이 수퍼 클래스 BaseEntityData을 어떻게 수정할 수 있습니까? 이 수퍼 클래스를 확장하는 엔티티가 300 개가 넘습니다.

+4

시퀀스를 사용하십시오. 오라클이 수행하는 방식 (그리고 대부분의 다른 DBMS)과 같습니다. 나는 JPA를 정말로 모른다. 그러나 나는 "시퀀스"에 대한 generater 전략이 있다고 생각한다. –

답변

2

이름이 적습니다. 오라클의 경우 시퀀스를 생성하고이를 사용하여 ID를 생성해야합니다.

주석은는 확장하기위한 것 수퍼 클래스의 ID를 정의하려고하는 것 같습니다이

@id 
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="ENTITY_SEQUENCE") 
@SequenceGenerator(name="ENTITY_SEQUENCE", sequenceName="ENTITY_SEQUENCE") 

처럼 보일 것입니다. 그렇다면 ID를 하위 클래스 수준으로 이동하는 것이 좋습니다. 많은 오브젝트가있는 대규모 엔터 프라이즈 응용 프로그램에서는 별도의 엔티티에 대해 별도의 ID 순서를 사용할 수 있습니다.

+0

이것은 정확히 내가하고 싶지 않은 것이다. 엔티티는 실제로 많습니다. 모든 엔티티에'ids'가 중복되는 것은 지금 우리가 실제로 수행하고 싶지 않은 것입니다. 수퍼 클래스에서'ids'를 가질 수있는 방법이 없으며 엔티티에 다른 id를 생성합니다. –

+0

ID가 모든 엔티티 중에서 고유한지 확인하려면 상위 클래스에 있어야합니다. 그러나 오라클 시퀀스에는 상한값이 있다는 것을 명심하십시오. ..... 같은 ID를 가진 관련없는 엔터티를 갖는 것은 어쨌든 잘못된 것입니까? – Thihara

+0

내가 원하는 것은 서로 다른 테이블에 대해 고유 한 'ids'를 갖는 것입니다. 그러나 테이블은 고유해야합니다. 예 : 'table_1'은'ids'가'1,2,3, ...','table_2'는'ids'가 1, 2, 3, ...을 가질 것입니다. 즉, 모든 테이블에서 일련 번호가 생성됩니다. 기본 클래스에 정의 된 'id'를 사용하고 Oracle 데이터베이스 및 시퀀스 생성기를 사용하여이 작업을 수행 할 수 있습니까? –

관련 문제