JPA 枚举 ORDINAL 与 STRING

新手上路,请多包涵

可以使用任一方法在 JPA 中定义枚举

@Enumerated(EnumType.ORDINAL)

或者

@Enumerated(EnumType.STRING)

我想知道这两个定义的优点和缺点是什么?

我听说 ORDINAL 比使用 EclipseLink 的 STRING 表现更好(更快)。

真的吗?

原文由 jst99 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 821
2 个回答

我总是去 STRING

速度很少是最重要的问题——可读性和可维护性 更为 重要。

我使用 STRING 因为手动检查数据库中的行要容易得多,但更重要的是,我可以做两件事,而无需触及数据库, ORDINAL 无法处理:

  1. 我可以更改枚举的 顺序
  2. 我可以在枚举列表的中间 插入 新的枚举

这两项更改都将改变数据库中已使用的枚举的序数值,因此如果您使用 ORDINAL 会破坏现有数据。

如果您更改枚举值(不常见),处理它很简单:

 UPDATE table SET enum_column = 'NEW_ENUM_NAME' where enum_column = 'OLD_ENUM_NAME';

原文由 Bohemian 发布,翻译遵循 CC BY-SA 3.0 许可协议

很可能 ORDINAL 更有效率,但那是次要的。 ORDINAL 有一些缺点:

  • 它在数据库中的可读性较差
  • 如果您重新排序您的枚举定义,数据库将不一致。

使用 STRING 你不能重命名你的枚举。

选择其中之一并在整个应用程序中使用它——保持一致。

如果您的数据库将被其他客户端/语言使用 - 使用 STRING ,它更具可读性。

原文由 Bozho 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题