当前位置: 首页 > 面试题库 >

JPA枚举普通vs STRING

方永贞
2023-03-14
问题内容

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

@Enumerated(EnumType.ORDINAL)

要么

@Enumerated(EnumType.STRING)

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

我听说ORDINAL的性能比EclipseLink的STRING更好(更快)。
真的吗?


问题答案:

我总是去STRING

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

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

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

这两个更改都将更改数据库中已在使用的枚举的序数值,从而在使用时破坏现有数据ORDINAL

如果更改枚举值(不是很常见),则处理起来很简单:

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


 类似资料:
  • 我听到一些人建议在C++中使用枚举类,因为它们的类型安全。 但这到底意味着什么呢?

  • 我尝试使用@Enumerated annotation映射枚举类型,但得到以下错误: 我的工作:在postgres @entity@table(name=“test_table”)公共类TestTable{... @enumerated(enumtype.string)@column(name=“col”)private TestType col;...}

  • 我的JPA实体作为枚举字段 哪里 如果我用规范添加where条件 将枚举包含到规范查询中的正确方法是什么?

  • 枚举具有名为'hash value'的属性,该属性是枚举内的索引。

  • 问题内容: 我们有一个带有枚举字段-的实体,我们想使用JPA注释-为它设置默认值。 但是,当我们将实体保存到数据库时,此字段的值为和。对于布尔字段- 正确的默认值()已保存。 如果改为使用:,则会在保存时得到以下异常: 我们做错了什么?为什么它仅适用于布尔值? 问题答案: 当某些SQL代码在未为emailCommunicationStatus列指定任何值的情况下插入一行时,您所做的工作很有用。在这