关于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。