我发现Sorm已经支持org.joda.time.DateTime
。是否有可能增加对其他类型的支持?
例如,我的case类有一个java.nio.charset.Charset
或Locale
字段,我想将其转换为字符串。假设我有完成从自定义类型到/从SQL类型转换的函数,我该如何告诉Sorm使用它?
答案 0 :(得分:2)
SORM对某种数据类型的支持比仅转换为SQL类型和从SQL类型转换的能力要复杂得多。某些类型的值可能跨越多个列(例如Tuple,Range),其他类型可能需要中间表(Seq,Set,Map),并且所有这些值都需要单独的方法来翻译查询子句。所有这些都会导致一个非常复杂的ad-hoc类型映射API,如果要暴露它。
但问题是上面的内容真的不是为什么没有公开这样的API而且很可能永远都不会。你看,SORM的哲学基本上都是关于纯不可变数据模型的,而设计这种模型的最简洁方法是使用标准的Scala不可变数据类型和案例类。
因此,使用SORM设计应用程序的简洁方法是将这些有状态的Java类转换为应用程序中的不可变值。例如,您可以在模型中实现自定义case class Charset (...)
,使用SORM的实例进行注册,并使您的转换函数在此类型与应用程序中的Java类之间起作用。除此之外,您可以将此Charset
实现为Enumeration
,这似乎是最合适的。
关于Joda Time类型支持的论点,主要是因为需要一些数据类型来表示SQL的时间戳。将此逻辑看作与您的想法相反。