HowTo: Bidang Kustom di Lift-Record-Squeryl

92

Saya mencoba membuat EnumListFielddi Lift / Record / Squeryl, mirip dengan MappedEnumListdi 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"?

Sebastien Diot
sumber
1
Tautan ini mungkin membantu: stackoverflow.com/questions/12175645/squeryl-custom-field-types
Mandar Pandit
Itu tidak mungkin, Anda harus mencobanya dengan cara lain dari rangkaian yang sama seperti yang Anda butuhkan. untuk ini, Anda dapat mencoba bantuan MSDN.
SUNIL MURARKA

Jawaban:

1

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.

Gucci
sumber
Saya belum pernah menggunakan Scala, dan karenanya Lift / Record / Squeryl, selama lebih dari 5 tahun. Saya telah melupakan semuanya, jadi saya tidak memenuhi syarat lagi untuk memutuskan apakah jawaban Anda benar dan menyelesaikan masalah. Saya tidak yakin seperti apa "proses" Stack-Overflow dalam kasus ini. Saya akan bertanya di "meta" ...
Sebastien Diot
"Meta" berkata "tunggu dan lihat"; jika jawaban Anda mendapat banyak +1, maka "mungkin benar", dan saya dapat menerimanya ...
Sebastien Diot