【发布时间】:2010-12-01 09:51:33
【问题描述】:
我使用 Eclipselink 作为我的持久性提供程序。有没有办法指定列在数据库中出现的顺序?数据库中的列顺序与我的实体中的属性顺序不匹配。据我所知,休眠顺序列按字母顺序排列,但我找不到 Eclipselink 的任何规范。
【问题讨论】:
标签: jpa jakarta-ee
我使用 Eclipselink 作为我的持久性提供程序。有没有办法指定列在数据库中出现的顺序?数据库中的列顺序与我的实体中的属性顺序不匹配。据我所知,休眠顺序列按字母顺序排列,但我找不到 Eclipselink 的任何规范。
【问题讨论】:
标签: jpa jakarta-ee
EclipseLink 根据映射的权重对映射以及它们的列进行排序。通常不会设置权重,只是为了确保 Baisc 映射在前,关系映射在后。
如果您愿意,可以使用 DescriptorCustomizer 设置映射的权重。您还可以将描述符设置为不按权重排序映射,因此将使用它们指定的顺序 (setShouldOrderMappings(false))。
public void MyCustomizer implements DescriptorCustomizer {
public void customize(ClassDescriptor descriptor) {
descriptor.getMappingForAttributeName("name").setWeight(2);
}
}
最近在 2.2 开发中对映射的权重进行了一些更改,现在映射在相同的权重级别内按名称排序。
【讨论】:
setShouldOrderMappings(false) 是否符合您的预期。 AFAIK 无法获得源代码文件中指定的顺序,这实际上通常是您想要的。因此,您需要在代码示例中明确指定权重。
@PrimaryKey 注释(您将对控制 PK 索引中列的顺序感兴趣,而不仅仅是这些列在表本身中的列出方式)。对于所有其他列,此处描述的方法将正常工作。在 EclipseLink 2.6 上测试。