2009-08-19 30 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 |    | 
+--------------------+--------------+------+-----+---------+----------------+ 

これは私のエンティティBeanがどのように見えるかです:

 
@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によって作成されたテーブルがすぐに、あなたが望むように列を並べ替えることができるようにすることを提案します。私はそうした。 Toadのようなツールは、UI上で列の上/下のオプションを使用すると非常に簡単になります –

関連する問題