我看到Sorm已經支持org.joda.time.DateTime
。是否有可能添加對其他類型的支持?如何在Sorm中添加自定義值類型?
例如,我的案例類有一個java.nio.charset.Charset
或Locale
字段,我想將其轉換爲字符串。假設我有完成從自定義類型到SQL類型的轉換的功能,我該如何告訴Sorm使用它?
我看到Sorm已經支持org.joda.time.DateTime
。是否有可能添加對其他類型的支持?如何在Sorm中添加自定義值類型?
例如,我的案例類有一個java.nio.charset.Charset
或Locale
字段,我想將其轉換爲字符串。假設我有完成從自定義類型到SQL類型的轉換的功能,我該如何告訴Sorm使用它?
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的時間戳。看到這個邏輯與你所想的相反。
感謝您的精心解答! – Hbf