一尘不染

在jpa中生成的表中的顺序错误

java 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;
    }

阅读 219

收藏
2020-03-20

共1个答案

一尘不染

Hibernate会按字母顺序生成列。根据这篇文章,原因如下:

它被排序以确保跨集群的确定性排序。

我们不能每次都依靠vm以相同的顺序返回方法,因此我们不得不做些事情。

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

我还发现,模式自动生成会按字母顺序为复合主键创建列,这似乎就像你的问题。该票证与主键的顺序更改有关,这会对索引性能产生负面影响。

2020-03-20