【问题标题】:how to generate tables from enums with values in spring boot?如何从带有值的枚举生成表?
【发布时间】:2019-03-22 15:49:38
【问题描述】:
@Entity
public class User{

  @Id()
  private int id;

  private UserStatus userStatus;
}

public enum Country{
    Active, Pending, Blocked;
}

我想用里面的值创建一个 UserStatus 表。

第一种方法是将@Enumerated 与String 或Integer 一起使用。但是,我不希望这样,因为这些枚举值可以更改。

另一种方法是在 UserStatus 类上声明 @Entity。添加 ID 和值。保持多对一映射。这样,用户将拥有引用的外键作为用户状态。

如果我们想将枚举值保留在表中,这是最好的方法还是有其他方法? 我们可以在 Spring Boot 中生成包含枚举值的 Gender 表吗?

[ UserStatus 枚举只是一个示例。主要思想是了解创建表的最佳方法及其价值。]

我很高兴能就此提出一些观点。

【问题讨论】:

  • 性别表?真的吗?
  • Enum field in JPA Entity的可能重复
  • 如果我们使用@Enumerated.Ordinal/String,那么它将对应的值保存到列中。但这不是最好的方法。
  • 我已更新问题以获得更多说明
  • @Pino,当您需要将性别映射到代词和文章时,性别表很有用,因为语言确实会按性别改变它们。它有助于构建更自然的文本。如果弹出一个新的性别,你只需要改变一个地方并开始使用它,根本不需要改变代码。您甚至可以让人们使用这样的表格来决定他们想要什么性别/文章/代词,并让算法在 x 量数据后决定新的事实性别并改进显示的默认选择(有点像 ReCaptcha 过去帮助数字化书籍的方式)

标签: java spring hibernate jpa enums


【解决方案1】:

假设您使用MySQL 作为数据库。

现在如果我问你

如何在 User 表中存储 Country 列?

列类型是什么?

VARCHAR 我猜。

@Entity 级别也遵循相同的方法。

所以这种方法对我来说听起来不错

@Enumerated(EnumType.STRING)
private UserStatus gender;

可以为more detail阅读这篇文章

关于您的建议

用户状态上的@Entity

您正在增加 1 层复杂性。

将不得不管理另一个表。 LAZY_LODAING, CASCADING 和其他需要处理的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    相关资源
    最近更新 更多