HowTo: ฟิลด์ที่กำหนดเองใน Lift-Record-Squeryl


92

ฉันกำลังพยายามสร้างEnumListFieldใน Lift / Record / Squeryl คล้ายกับMappedEnumListในLiftMapper. ประเภทการจัดเก็บควรเป็นแบบยาว / ใหญ่ ฉันเข้าใจว่าถ้าฉันกำหนด:

def classOfPersistentField = classOf[Long]

จากนั้น Squeryl จะรู้ว่าควรสร้างคอลัมน์ BIGINT และฉันรู้ว่ามันใช้setFromAny()ในการกำหนดค่าโดยส่งผ่าน Long ชิ้นเดียวที่ฉันไม่ได้รับคือ:

มันจะอ่านค่าของฟิลด์อย่างไร? ถ้ามันใช้valueBoxมันจะได้ a Seq[Enum#Value]และมันจะไม่รู้ว่าจะเปลี่ยนมันเป็น Long ได้อย่างไร

ฉันจะบอกให้ Squeryl แปลงของฉันSeq[Enum#Value]เป็น Long ได้อย่างไรหรือกำหนด "getter" ที่คืนค่า Long และไม่ขัดแย้งกับ getter "normal"


1
ลิงก์นี้อาจช่วยได้: stackoverflow.com/questions/12175645/squeryl-custom-field-types
Mandar Pandit

เป็นไปไม่ได้คุณต้องลองวิธีอื่นของซีรีส์ซึ่งเหมือนกับความต้องการของคุณ สำหรับสิ่งนี้คุณสามารถลองใช้ MSDN help
SUNIL MURARKA

คำตอบ:


1

คุณใช้ตรรกะการตรวจสอบความถูกต้องของคุณไม่ถูกต้อง วิธีที่ถูกต้องในการตรวจสอบความถูกต้องของฟิลด์เรกคอร์ดคือการลบล้าง

def validations: List[ValidationFunction]

โดยที่ ValidationFunction คือนามแฝงชนิด

type ValidationFunction = ValueType => List[FieldError]

และในกรณีของคุณ ValueType == String

ปัญหาต่อไปคือลักษณะโดเมนของคุณ เนื่องจากการเรียกตรวจสอบความถูกต้องของคุณถูกแทรกอยู่ในนิยามคลาสจึงจะถูกเรียกเมื่อมีการสร้างฟิลด์


ฉันไม่ได้ใช้ Scala ดังนั้น Lift / Record / Squeryl มานานกว่า 5 ปีแล้ว ฉันลืมไปหมดแล้วและฉันไม่มีคุณสมบัติอีกต่อไปที่จะตัดสินว่าคำตอบของคุณถูกต้องและแก้ปัญหาได้หรือไม่ ฉันไม่แน่ใจว่า "กระบวนการ" Stack-Overflow ควรเป็นอย่างไรในกรณีนี้ ฉันจะถามใน "meta" ...
Sebastien Diot

"Meta" บอกว่า "รอดู"; ถ้าคำตอบของคุณได้รับ +1 แสดงว่า "น่าจะถูก" และฉันก็ยอมรับได้ ...
Sebastien Diot
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.