【问题标题】:Enums to String in MYSQL using Spring使用 Spring 在 MYSQL 中枚举到字符串
【发布时间】:2011-08-18 19:39:15
【问题描述】:
我正在使用 Spring(特别是 Roo)来开发应用程序,对于一个实体,我有一个基于一组枚举(即枚举(Blue,Pink,Red))的下拉列表。当存储在 MYSQL 数据库中时,这些枚举存储为数字(显然)。我希望将这些存储为实际的字符串值而不是数据库中的数字(所以在 MYSQL 中我希望“pinK”位于“color”而不是简单的“2”下。这可能吗?谢谢
编辑:
让我试着用不同的方式问它。说当我从 MYSQL 检索数据时。我想要实际单词而不是符号值,有什么方法可以做到这一点?
【问题讨论】:
标签:
mysql
spring
spring-roo
【解决方案1】:
我会尝试使用 @Enumerated(EnumType.STRING) 注释标记您的字段,例如:
@Enumerated(EnumType.STRING)
private MyEnumType myEnumField;
【解决方案2】:
您可以将值存储为文本,然后使用插入触发器来验证存储的值是允许值之一(因为 MySQL 不支持检查约束)。
您还可以索引最少数量的字符以提供唯一性,从而使您的索引开销更小。在您的示例中,您只需要索引第一个字符,因为“B”、“P”和“R”是唯一的。如果将“Brown”添加到列表中,则需要将前两个字符(“Bl”、“Pi”、“Re”、“Br”)编入索引。
编辑
我最初的建议是将值存储为实际的文本表示形式,而不是数字。
不过,另一种方法是添加一个“颜色”表:
id INT
name VARCHAR
然后让您的“枚举”列成为颜色表的外键。然后,当您进行选择时:
SELECT ...,colors.name AS color
FROM table t
JOIN colors c ON t.color = c.id