[scala] 방법 : Lift-Record-Squeryl의 사용자 지정 필드

나는를 만들기 위해 노력하고있어 EnumListField유사 리프트 / 기록 / Squeryl에 MappedEnumList에서 LiftMapper. 스토리지 유형은 Long / BIGINT 여야합니다. 다음을 정의하면 이해합니다.

def classOfPersistentField = classOf[Long]

그러면 Squeryl은 BIGINT 열을 만들어야 함을 알게됩니다. 그리고 나는 그것이 setFromAny()값을 설정하고 Long을 전달 하는 데 사용 한다는 것을 알고 있습니다 . 내가 얻지 못하는 한 조각은 :

필드의 값을 어떻게 읽습니까? 를 사용하면를 valueBox얻게 Seq[Enum#Value]되며이를 Long으로 바꾸는 방법을 알 수 없습니다.

Squeryl에게 my Seq[Enum#Value]를 Long 으로 변환 하도록 지시하거나 Long을 반환하는 “getter”를 정의하고 “일반”getter와 충돌하지 않는 방법은 무엇입니까?



답변

유효성 검사 논리를 잘못 구현하고 있습니다. 레코드 필드의 유효성을 검사하는 올바른 방법은

def validations: List[ValidationFunction]

여기서 ValidationFunction은 유형 별명입니다.

type ValidationFunction = ValueType => List[FieldError]

그리고 귀하의 경우 ValueType == String.

다음 문제는 도메인 특성입니다. 유효성 검사 호출은 클래스 정의에 인라인되므로 필드가 생성 될 때 호출됩니다.


답변