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。