2009-08-19 15 views
28

To (powinna) być raczej prosta sprawa, jednak walczę.Niewłaściwa kolejność w wygenerowanej tabeli w jpa

Chcę stół do wygenerowania tak:

 
id 
organizationNumber 
name 

Jednak kiedy patrzę w bazie danych, widzę, że kolejność jest złe. Czy ktokolwiek wie, w jaki sposób mogę zmusić hibernate/jpa do wygenerowania tabeli z prawidłową kolejnością?

 
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 |    | 
+--------------------+--------------+------+-----+---------+----------------+ 

To jest jak moja jednostka fasola wygląda następująco:

 
@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; 
    } 
} 

Odpowiedz

44

Hibernacja generuje kolumn w alfabetycznej kolejności. Według this post powodem jest podana jako:

Jest klasyfikowane do ensurce deterministyczny zamówieniami klastrów.

Nie możemy polegać na vm, aby zwrócić metody w tej samej kolejności za każdym razem, , więc musieliśmy coś zrobić.

Wygląda na to, że był w kolejności występowania, ale zmieniło się to pomiędzy 3.2.0 GA a 3.2.1 GA.

Znalazłem również Schema auto generation creates columns in alphabetical order for compound primary keys i wydaje mi się, że to jest twój problem. Ten bilet dotyczy zmiany kolejności w kluczach podstawowych i ma negatywny wpływ na wydajność indeksów.

Nie ma rozwiązania tego problemu poza obejściem nazywania kolumn w taki sposób, aby były wyświetlane we właściwej kolejności (nie, nie żartuję).

+1

Twoja odpowiedź na pytanie, dlaczego tak się dzieje, jest poprawna, ponieważ nie ma prawdziwego porządku, jeśli chodzi o adnotacje. Innym rozwiązaniem nie jest używanie automatycznego generowania schematu. –

+0

Nie można użyć refleksji, iterować po polach i budować w ten sposób listy kolumn? – cletus

+9

LOL. Nie rozumiem, jak trudne może być posiadanie wartości w kolumnie @Column (order = 1), aby pobierał element zamówienia, a następnie zapewnia poprawną kolejność. Niemniej jednak, dziękuję za odpowiedź. –

2

DataNucleus pozwala na rozszerzenie określające pozycję do generowania schematu, FWIW.

+0

Proponuję: Gdy tylko tabela utworzona przez Hibernate, możesz ZMIENIĆ ją, aby zamówić kolumny tak, jak chcesz. Tak zrobiłem. Narzędzia takie jak Toad ułatwiają korzystanie z opcji "Góra/Dół" w stosunku do interfejsu użytkownika –

Powiązane problemy