【问题标题】:Can I configure Play to use mysql enums instead of ints?我可以将 Play 配置为使用 mysql 枚举而不是整数吗?
【发布时间】:2012-01-03 08:45:51
【问题描述】:

我的模型包含一个枚举,它由 JPA 映射到我的 mysql 数据库上的 int 列。

mysql有一个原生的enum类型,使用起来会更方便。

如何配置 JPA 以使用此类型?

@Entity
public class User extends Model {
  public enum Role {
    User,
    Moderator,
    Admin,
  }

  public Role role;
}

【问题讨论】:

  • 重复:stackoverflow.com/questions/2160700/… 简而言之:不要使用 MYSQL 枚举!有更好的模式,使用 ORDINAL 是为了紧凑,使用 STRING 是为了可读性。您可以为数据库创建一个带有短字符串的枚举,为您的代码创建一个较长的枚举。
  • @Stefano - 由于 Play Framework 的上下文,并不是真正的重复。但无论如何,我真的不知道 enum 是否是专有的 mysql。我不想仅仅为了支持专有的 mysql 行为而更改我的代码,所以我可能会坚持使用 Play 默认值。
  • 看起来我正在阅读你所有的剧本!现在的问题:D;我会说在这种情况下,您是否通过 Play 没有任何区别!与否,因为玩!只是扩展了 JPA/Hibernate,所以每个问题都会有 Play 的问题!也!
  • @Stefano - 我倾向于问很多问题(这就是我获得 Stack Overflow 代表的大部分内容的方式)。我接受了答案,但不确定它是否是 exact 重复,因为我想要的上下文(即使他们原来有相同的答案)。

标签: java hibernate jpa playframework


【解决方案1】:

没有对枚举 AFAIK 的内置支持,但也许您可以尝试将此作为解决方法(我从未测试过):

@Entity
public class User extends Model {
    public enum Role {
        User,
        Moderator,
        Admin,
    }

    @Enumerated(EnumType.STRING)
    @Column(columnDefinition = "ENUM('User', 'Moderator', 'Admin')")
    public Role role;
}

您可以使用EnumType.STRING 将值作为字符串存储在数据库中。
但是使用本机 ENUM 需要您使用 @Column 注释定义 columnDefinition ,这需要在那里对您的所有角色进行硬编码,你看到了吗?此处重复。

【讨论】:

  • 谢谢,有机会我去看看。
  • @ripper234 这意味着这是一个非常糟糕的主意 :) !
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多