Saya mencoba membuat EnumListField
di Lift / Record / Squeryl, mirip dengan MappedEnumList
di LiftMapper
. Jenis penyimpanan harus Long / BIGINT. Saya memahami bahwa jika saya mendefinisikan:
def classOfPersistentField = classOf[Long]
Kemudian Squeryl akan tahu bahwa ia harus membuat kolom BESAR. Dan saya tahu itu digunakan setFromAny()
untuk menetapkan nilai, meneruskan Long. Satu bagian yang tidak saya dapatkan adalah:
Bagaimana cara membaca nilai bidang? Jika digunakan valueBox
, ia akan mendapatkan a Seq[Enum#Value]
, dan ia tidak akan tahu bagaimana mengubahnya menjadi Long.
Bagaimana cara memberitahu Squeryl untuk mengubah saya Seq[Enum#Value]
menjadi Long, atau mendefinisikan "getter" yang mengembalikan Long, dan itu tidak bertentangan dengan getter "normal"?
Jawaban:
Anda salah mengimplementasikan logika validasi. Cara yang benar untuk memvalidasi bidang Rekam adalah dengan menimpanya
def validations: List[ValidationFunction]
di mana ValidationFunction adalah alias tipe
type ValidationFunction = ValueType => List[FieldError]
dan dalam kasus Anda ValueType == String.
Masalah berikutnya adalah sifat Domain Anda. Karena panggilan Anda untuk memvalidasi dimasukkan ke dalam definisi kelas, panggilan tersebut akan dipanggil saat bidang Anda dibuat.
sumber