Maison  >  Article  >  Java  >  Pourquoi JPA génère-t-il des tableaux avec des colonnes par ordre alphabétique ?

Pourquoi JPA génère-t-il des tableaux avec des colonnes par ordre alphabétique ?

DDD
DDDoriginal
2024-10-29 06:23:30275parcourir

Why Does JPA Generate Tables with Columns in Alphabetical Order?

Ordre de table incorrect dans la table générée par JPA

Problème :

L'API de persistance Java (JPA) semble avoir généré un tableau avec un ordre de colonne incorrect, en particulier avec la colonne 'nom' apparaissant avant la colonne 'organizationNumber', alors que l'ordre souhaité est l'inverse.

Enquête :

Lors de l'inspection du tableau, l'ordre suivant est observé :

+--------------------+--------------+------+-----+---------+----------------+
| 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    |                | 
+--------------------+--------------+------+-----+---------+----------------+

Cause :

JPA génère les colonnes par ordre alphabétique par défaut. Cet ordre est destiné à garantir un ordre déterministe entre les clusters et à éviter les incohérences dans les positions des colonnes.

Solution de contournement :

Malheureusement, il n'existe pas de solution simple à ce problème. Une solution de contournement consiste à nommer manuellement les colonnes de manière à forcer l'ordre souhaité. Ceci peut être réalisé en préfixant les noms de colonnes avec des caractères alphanumériques appropriés, tels que :

@Entity
@NamedQuery(name = "allOrganizations", query = "SELECT org FROM Organization org order by name")
public class Organization {

    private Long id;
    @Column(name = "a_name")
    private String name;
    @Column(name = "b_organizationNumber")
    private String organizationNumber;

    // ...
}

Cette approche forcera la colonne « id » à apparaître en premier, suivie de « nom » (préfixé par « a » ) puis 'organizationNumber' (préfixé par 'b').

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn