什么时候应该使用枚举而不是域,反之亦然?

时间:2014-11-27 01:08:51

标签: java grails

我的上下文:用户将在表单中添加众多类型的公司之一。对于该表单,我创建了enum来填充列表框而不是拉动数据库。

我会尽力解释我的问题:在我的上下文中,使用enumdomain显示和保存到数据库之间的区别是什么?绩效,逻辑,最佳实践?

因为当用户保存companyType时,它会将int保存到数据库中,但我可以看到它是description。使用方法@Overide toString()

我没有使用enum作为下面的代码,而是创建了一个包含iddescription的域名,而且还在我的数据库中添加了两个寄存器,以便形成。

class Company{
    CompanyType companyType
}

将此用作枚举

enum CompanyType {
    MARKET('Market', 1),
    SHOP('Shop', 2)
// ... etc of code
}

或将其用作域名

class CompanyType {
    Long id
    String description
}
抱歉我的英语不好。

2 个答案:

答案 0 :(得分:1)

您应该考虑的主要因素是公司类型数据可能会改变多少,如果您能够列出您将使用的所有可能的公司类型并确保不会经常更新,那么枚举是合理的另一方面,如果要改变,添加,更新和删除公司类型,那么表格和POJO类是正确的选择。

答案 1 :(得分:1)

两点:

  • 性能:枚举值在db中保存为String(通常为enum.toString()),并且在ORM转换期间不需要任何FK关系并且开销较小

  • 灵活性:只能使用新部署更新枚举值。如果您需要更改现有枚举常量的值,则必须迁移数据

我会使用枚举而不是域类,因为性能通常更重要