关于java:jpa中生成的表中的错误排序

Wrong ordering in generated table in jpa

这应该是一件相当简单的事情,不管我在挣扎。

我希望生成这样的表:

1
2
3
id
organizationNumber
name

但是,当我在数据库中查找时,我发现顺序是错误的。有人知道我如何强制hibernate/jpa以正确的顺序生成表吗?

1
2
3
4
5
6
7
8
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是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
@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;
    }
}


Hibernate按字母顺序生成列。根据本帖,原因如下:

It is sorted to ensurce deterministic
ordering across clusters.

We can't rely on the vm to return the
methods in the same order every time
so we had to do something.

号

显然,它以前是按发生顺序排列的,但这在3.2.0 ga和3.2.1 ga之间发生了变化。

我还发现模式自动生成会按字母顺序为复合主键创建列,这似乎是您的问题。这张罚单是关于主键中的顺序更改,这会对索引性能产生负面影响。

除了以正确的顺序命名列之外,没有其他解决方法可以解决这个问题(不,我不是开玩笑)。


DataNucleus允许扩展指定模式生成的位置fwiw。