Подтвердить что ты не робот

Неправильное упорядочение в сгенерированной таблице в 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;
    }


    @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;
    }
}
4b9b3361

Ответ 1

Hibernate генерирует столбцы в алфавитном порядке. Согласно этот пост, причина дается как:

Он сортируется, чтобы обеспечить детерминированный упорядочение по кластерам.

Мы не можем полагаться на vm, чтобы вернуть методы в том же порядке каждый раз поэтому мы должны были что-то сделать.

По-видимому, он был в порядке появления, но это изменилось между 3.2.0 GA и 3.2.1 GA.

Я также нашел Автогенерация схемы создает столбцы в алфавитном порядке для составных первичных ключей, и это похоже на вашу проблему. Этот билет касается изменения порядка в первичных ключах и отрицательно влияет на производительность индекса.

Нет никакого исправления для этого, кроме обхода обхода столбцов таким образом, чтобы они выходили в правильном порядке (нет, я не шучу).

Ответ 2

DataNucleus позволяет расширение, определяющее позицию для генерации схемы, FWIW.