HowTo: Custom Field trong Lift-Record-Squeryl


92

Tôi đang cố tạo EnumListFieldtrong Lift / Record / Squeryl, tương tự như MappedEnumListtrong LiftMapper. Loại lưu trữ phải là Dài / LỚN. Tôi hiểu điều đó nếu tôi xác định:

def classOfPersistentField = classOf[Long]

Sau đó Squeryl sẽ biết nó nên tạo một cột BIGINT. Và tôi biết nó sử dụng setFromAny()để đặt giá trị, truyền vào Long. Một phần tôi không nhận được là:

Nó sẽ đọc giá trị của trường như thế nào? Nếu nó sử dụng valueBox, nó sẽ nhận được một Seq[Enum#Value], và nó sẽ không biết làm thế nào để biến nó thành một Long.

Làm cách nào để yêu cầu Squeryl chuyển đổi của tôi Seq[Enum#Value]thành Long hoặc xác định "getter" trả về Long và điều đó không mâu thuẫn với (các) getter "bình thường"?



nó không thể, bạn phải thử nó theo cách khác của loạt giống như yêu cầu của bạn. về điều này, bạn có thể thử trợ giúp MSDN.
SUNIL MURARKA

Câu trả lời:


1

bạn đang triển khai logic xác thực của mình không chính xác. Cách chính xác để xác thực trường Bản ghi là ghi đè

def validations: List[ValidationFunction]

trong đó ValidationFunction là một loại bí danh

type ValidationFunction = ValueType => List[FieldError]

và trong trường hợp của bạn là ValueType == String.

Vấn đề tiếp theo là đặc điểm Miền của bạn. Bởi vì lệnh gọi xác thực của bạn được đưa vào định nghĩa lớp, nó sẽ được gọi khi trường của bạn được xây dựng.


Tôi đã không sử dụng Scala, và do đó là Lift / Record / Squeryl, trong hơn 5 năm. Tôi đã quên tất cả về điều đó, và vì vậy tôi không còn đủ tư cách để quyết định xem câu trả lời của bạn có đúng hay không và giải quyết được vấn đề. Tôi không chắc "quy trình" Stack-Overflow nên là gì trong trường hợp này. Tôi sẽ hỏi trong "meta" ...
Sebastien Diot 14/03/18

"Meta" nói "chờ xem"; nếu câu trả lời của bạn nhận được một loạt các +1, thì đó là "lẽ phải", và tôi có thể chấp nhận nó ...
Sebastien Diot
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.