【问题标题】:JPA and order of columns in the databaseJPA和数据库中的列顺序
【发布时间】:2010-12-01 09:51:33
【问题描述】:

我使用 Eclipselink 作为我的持久性提供程序。有没有办法指定列在数据库中出现的顺序?数据库中的列顺序与我的实体中的属性顺序不匹配。据我所知,休眠顺序列按字母顺序排列,但我找不到 Eclipselink 的任何规范。

【问题讨论】:

    标签: jpa jakarta-ee


    【解决方案1】:

    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 无法获得源代码文件中指定的顺序,这实际上通常是您想要的。因此,您需要在代码示例中明确指定权重。
    • 请参阅this blog 以获取有关如何使用自定义注释执行此操作的完整示例。
    • 作为复合 PK 一部分的列不能使用此处所述的“setWeight”方法设置其顺序。相反,您必须为此类列添加 EclipseLink @PrimaryKey 注释(您将对控制 PK 索引中列的顺序感兴趣,而不仅仅是这些列在表本身中的列出方式)。对于所有其他列,此处描述的方法将正常工作。在 EclipseLink 2.6 上测试。
    猜你喜欢
    • 2011-06-28
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多