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


92

나는를 만들기 위해 노력하고있어 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와 충돌하지 않는 방법은 무엇입니까?



그것은 불가능합니다, 당신은 당신의 요구 사항에 더 유사한 시리즈의 다른 방법을 시도해야합니다. 이를 위해 MSDN 도움말을 시도 할 수 있습니다.
SUNIL MURARKA

답변:


1

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

def validations: List[ValidationFunction]

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

type ValidationFunction = ValueType => List[FieldError]

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

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


저는 Scala를 사용하지 않았고 따라서 Lift / Record / Squeryl을 5 년 넘게 사용했습니다. 나는 그것에 대해 모든 것을 잊었으므로 더 이상 귀하의 대답이 정확하고 문제를 해결할 수 있는지 결정할 자격이 없습니다. 이 경우에 Stack-Overflow "프로세스"가 무엇인지 잘 모르겠습니다. 나는 ... "메타"에 요청할 것입니다
세바스티앙 Diot에게

"메타"는 "기다리고 보자"라고 말했다; 당신의 대답은 하나의 무리를 얻는 경우에, 다음 ... 그것은 "아마도 바로"이고, 나는 그것을 받아 들일 수
세바스티앙 Diot
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.