这(应该)是一件很简单的事情,但是我很努力。
我希望这样生成一个表:
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; }
Hibernate会按字母顺序生成列。根据这篇文章,原因如下:
它被排序以确保跨集群的确定性排序。
我们不能每次都依靠vm以相同的顺序返回方法,因此我们不得不做些事情。
显然,它以前是按照发生的顺序排列的,但是在3.2.0 GA和3.2.1 GA之间发生了变化。
我还发现,模式自动生成会按字母顺序为复合主键创建列,这似乎就像你的问题。该票证与主键的顺序更改有关,这会对索引性能产生负面影响。