Scala,Morphia和Enumeration

时间:2012-10-08 20:13:10

标签: scala enums morphia

我需要在Morphia中存储Scala类。除非我尝试存储 _&lt ;:枚举

的集合,否则注释效果很好

Morphia抱怨它没有该类型的序列化器,我想知道如何提供一个。现在我将集合类型更改为 Seq [String] ,并在集合中的每个项目上调用 toString 填充它。

这很有效,但我不确定这是否正确。

1 个答案:

答案 0 :(得分:1)

这个问题在MongoDB顶部的几个可用抽象层中很常见。这一切都归结为一个基本原因:在json / bson中没有枚举。例如, Salat 也存在同样的问题。

事实上, MongoDB Java驱动程序不支持枚举,因为您可以在此处讨论中阅读:https://jira.mongodb.org/browse/JAVA-268您可以看到问题仍然存在。我看到使用MongoDB和Java的大多数框架都没有实现像这样的低级功能。我认为这个选择很有意义,因为它们让您可以选择如何处理未由低级驱动程序处理的数据结构,而不是强迫您如何操作。

总的来说,我觉得缺乏支持不是来自技术限制,而是来自设计选择。对于枚举,有多种方法可以使用它们的优点和缺点来映射它们,而对于其他数据类型则可能更简单。我不太详细了解MongoDB Java驱动程序,但我想支持多种“模式”需要进行一些重构(也许这就是为什么他们在讨论新版本的序列化?)

这是我正在考虑的两个策略:

  • 如果要对枚举进行索引并最小化占用空间,则将枚举映射为整数(不使用序号,请can set enum start value in java)。
  • 如果您的问题是对mongoshell的可查询性,因为您的数据将由数据科学家访问,您宁愿使用其字符串值存储枚举

总之,在本机对象和MongoDB之间添加中间数据结构没有任何问题。 Salat通过CustomTransformers支持它,在Morphia上也许你需要明确地进行转换。去吧。