问题:
Java Persistence API (JPA) 似乎已生成列顺序不正确的表,特别是“名称”列出现在“组织编号”列之前,尽管所需的顺序相反。
调查:
检查表后,会发现以下顺序:
+--------------------+--------------+------+-----+---------+----------------+ | 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 | | +--------------------+--------------+------+-----+---------+----------------+
原因:
JPA 默认情况下按字母顺序生成列。此排序旨在确保跨集群的确定性排序,并避免列位置不一致。
解决方法:
不幸的是,此问题没有直接的解决方法。一种解决方法是以强制所需顺序的方式手动命名列。这可以通过在列名称前添加适当的字母数字字符来实现,例如:
@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; // ... }
此方法将强制“id”列首先出现,然后是“name”(前缀为“a”) ),然后是“organizationNumber”(前缀为“b”)。
以上是为什么 JPA 生成的表中的列按字母顺序排列?的详细内容。更多信息请关注PHP中文网其他相关文章!