ハウツー:Lift-Record-Squerylのカスタムフィールド


92

私が作るしようとしているEnumListFieldにエレベーター/録音/ Squeryl、中には似MappedEnumListLiftMapper。ストレージタイプはLong / BIGINTである必要があります。私が定義すると、

def classOfPersistentField = classOf[Long]

次に、SquerylはBIGINT列を作成する必要があることを認識します。そして私はそれsetFromAny()が値を設定するために使用し、Longを渡すことを知っています。私が入手できないワンピースは:

フィールドの値をどのように読み取りますか?を使用する場合valueBox、を取得しSeq[Enum#Value]、それをLongに変換する方法がわかりません。

Squerylに自分Seq[Enum#Value]をLong に変換するように指示する方法、またはLongを返し、「通常の」ゲッターと競合しない「getter」を定義する方法を教えてください。


1
このリンクが役立つ場合があります:stackoverflow.com/questions/12175645/squeryl-custom-field-types
Mandar Pandit

それは不可能です。あなたの要件に似ているシリーズの他の方法を試す必要があります。これについては、MSDNヘルプを試すことができます。
SUNIL MURARKA 2017年

回答:


1

検証ロジックを正しく実装していません。Recordフィールドを検証する正しい方法は、オーバーライドすることです

def validations: List[ValidationFunction]

ここで、ValidationFunctionは型エイリアスです

type ValidationFunction = ValueType => List[FieldError]

そしてあなたの場合ValueType == Stringです。

次の問題は、ドメインの特性です。検証の呼び出しはクラス定義にインライン化されるため、フィールドが作成されるときに呼び出されます。


Scalaを使用していないため、Lift / Record / Squerylを5年以上使用していません。私はそれについてすべて忘れてしまったので、あなたの答えが正しいかどうかを判断して問題を解決する資格はもうありません。この場合、Stack-Overflowの「プロセス」がどうあるべきかわかりません。「メタ」で質問します...
Sebastien Diot

「メタ」は「待って見る」と言った。あなたの答えが+1の束を得れば、それは「おそらく正しい」であり、私はそれを受け入れることができます...
Sebastien Diot
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.