2009-08-19 5 views
28

이 작업은 다소 단순한 작업이지만 반드시 고심하고 있습니다.jpa에서 생성 된 테이블의 순서가 잘못되었습니다.

나는 테이블은 다음과 같이 생성 할 : 나는 데이터베이스에서 볼 때

 
id 
organizationNumber 
name 

그러나, 나는 순서가 잘못된 것을 알 수있다. 아무도 내가 어떻게 hibernate/jpa가 올바른 순서로 테이블을 생성하도록 강요 할 수 있는지 알지 못합니까?

 
desc Organization; 
+--------------------+--------------+------+-----+---------+----------------+ 
| Field    | Type   | Null | Key | Default | Extra   | 
+--------------------+--------------+------+-----+---------+----------------+ 
| id     | bigint(20) | NO | PRI | NULL | auto_increment | 
| name    | varchar(255) | NO |  | NULL |    | 
| organizationNumber | varchar(255) | NO | UNI | NULL |    | 
+--------------------+--------------+------+-----+---------+----------------+ 

이 내 엔티티 빈과 같은 모습입니다 :

 
@Entity 
@NamedQuery(name = "allOrganizations", query = "SELECT org FROM Organization org order by name") 
public class Organization { 

    private Long id; 
    private String organizationNumber; 
    private String name; 

    public Organization() { 
    } 

    public Organization(String name) { 
     this.name = name; 
    } 

    @Id 
    @GeneratedValue 
    public Long getId() { 
     return id; 
    } 

    @SuppressWarnings("unused") 
    private void setId(Long id) { 
     this.id = id; 
    } 

    @NotEmpty 
    @Column(unique=true, nullable=false) 
    public String getOrganizationNumber() { 
     return organizationNumber; 
    } 
     public void setOrganizationNumber(String organizationNumber) { 
     this.organizationNumber = organizationNumber; 
    } 


    @NotEmpty 
    @Column(nullable=false) 
    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    @Override 
    public String toString() { 
     return this.name + " " + this.organizationNumber; 
    } 
} 

답변

44

Hibernate는 알파벳 위해 열을 생성합니다. 클러스터에서 결정 순서를 ensurce에 정렬

:로 this post에 따르면 이유가 주어진다.

우리는 때마다 동일한 순서로 메서드를 반환하기 위해 VM을 사용할 수 없습니다. 그래서 우리는 뭔가해야했습니다.

분명히 이전에는 발생 순서대로 였지만이 값은 3.2.0 GA와 3.2.1 GA 사이에서 변경되었습니다.

나는 또한 Schema auto generation creates columns in alphabetical order for compound primary keys을 발견했으며이 문제는 귀하의 문제와 같습니다. 이 티켓은 기본 키가 변경되는 순서이며 인덱스 성능에 부정적인 영향을줍니다.

올바른 순서로 나와있는 방식으로 열 이름을 지정하는 대신 다른 방법이 없습니다 (아니요, 농담이 아닙니다).

+1

어노테이션과 관련하여 실제 순서가 없기 때문에이 방법이 올바른 이유에 대한 귀하의 대답은 정확합니다. 다른 해결책은 스키마 자동 생성을 사용하지 않는 것입니다. –

+0

리플렉션을 사용하여 필드를 반복하고 그런 식으로 열 목록을 작성할 수 없습니까? – cletus

+9

LOL. @Column (order = 1)에서 값을 가져 와서 order 요소를 취한 다음 올바른 순서를 유지하는 것이 얼마나 어려울 지 이해할 수 없습니다. 그럼에도 불구하고 대답 해 주셔서 감사합니다. –

2

DataNucleus는 스키마 생성 위치 인 FWIW를 허용합니다.

+0

나는 다음과 같이 제안한다 : Hibernate에 의해 생성 된 테이블이 곧 컬럼을 원하는대로 정렬하도록 ALTER 할 수있다. 나는 그렇게했다. Toad와 같은 도구는 UI를 통한 열 위쪽/아래쪽 옵션을 통해 매우 쉽게 만들 수 있습니다. –

관련 문제