如何在Sorm中添加自定义值类型?

如何在Sorm中添加自定义值类型?,sorm,Sorm,我看到它已经支持org.joda.time.DateTime。是否有可能添加对其他类型的支持 例如,我的case类有一个java.nio.charset.charset或Locale字段,我想将其转换为字符串。假设我有函数来完成从自定义类型到/从SQL类型的转换,我如何告诉Sorm使用它?Sorm对某个数据类型的支持比仅仅转换到SQL类型和从SQL类型转换的能力要复杂得多。某些类型的值可能跨越多个列(例如,Tuple、Range),其他类型的值可能需要中间表(Seq、Set、Map),并且所有这

我看到它已经支持
org.joda.time.DateTime
。是否有可能添加对其他类型的支持


例如,我的case类有一个
java.nio.charset.charset
Locale
字段,我想将其转换为字符串。假设我有函数来完成从自定义类型到/从SQL类型的转换,我如何告诉Sorm使用它?

Sorm对某个数据类型的支持比仅仅转换到SQL类型和从SQL类型转换的能力要复杂得多。某些类型的值可能跨越多个列(例如,Tuple、Range),其他类型的值可能需要中间表(Seq、Set、Map),并且所有这些类型的值都需要单独的方法来翻译查询子句。所有这些都会导致一个非常复杂的ad-hoc类型映射API,如果它被公开的话

但问题是,上述事实并不是这样一个API没有公开的原因,而且很可能永远不会公开。你看,SORM的哲学基本上都是关于纯不可变数据模型的,设计这种模型最干净的方法是使用标准Scala的不可变数据类型和case类

因此,使用SORM设计应用程序的干净方法是将这些有状态Java类转换为应用程序中的不可变值。例如,您可以在您的模型中实现一个定制的
case类Charset(…)
,在SORM的实例中注册它,并让您的转换函数在该类型和应用程序中的Java类型之间工作。除此之外,您还可以将此
字符集
实现为一个
枚举
,这似乎是最合适的


关于Joda时间类型支持的争论,主要是因为需要一些数据类型来表示SQL的时间戳。将此逻辑视为与您的想法相反。

感谢您详细的回答!