2012-12-10 22 views
2

我看到Sorm已经支持org.joda.time.DateTime。是否有可能添加对其他类型的支持?如何在Sorm中添加自定义值类型?

例如,我的案例类有一个java.nio.charset.CharsetLocale字段,我想将其转换为字符串。假设我有完成从自定义类型到SQL类型的转换的功能,我该如何告诉Sorm使用它?

回答

2

SORM对某一数据类型的支持是相当不只是转换和从SQL类型的能力更复杂。某些类型的值可能跨越多列(例如Tuple,Range),其他类型可能需要中间表(Seq,Set,Map),并且它们都需要单独的方法来转换查询子句。所有这些都会导致一个非常复杂的ad-hoc类型映射API,如果要暴露的话。

但是,上述事实并非是为什么这样的API没有被暴露并且很可能永远不会出现的原因。你看,SORM的哲学基本上都是关于纯粹的不可变数据模型,而设计这种模型最简洁的方法就是使用标准Scala的不可变数据类型和案例类。

因此,用SORM设计应用程序的干净方式是将那些有状态的Java类转换为应用程序中的不可变值。例如,您可以在您的模型中实现自定义case class Charset (...),将其注册到SORM的实例,并让您的转换函数在您的应用程序中的此类型和Java中的转换函数之间工作。除此之外,你可以实现这个Charset作为Enumeration,这似乎是最合适的。

关于您对Joda Time类型支持的争论,主要是因为需要某些数据类型来表示SQL的时间戳。看到这个逻辑与你所想的相反。

+0

感谢您的精心解答! – Hbf

相关问题