2016-03-24 1 views
0

Я закодировал список значений в одном столбце базы данных, присоединив их к разделителю. Это прекрасно работает, за исключением случаев, когда список пуст. В этом случае столбец базы данных заполняется пустой строкой, а при обратном отображении это дает мне Seq ("") вместо Seq.empty.Как сопоставить нулевое значение с Seq.empty в Slick

implicit val SeqUriColumnType = MappedColumnType.base[Seq[Uri], String](
    p => p.map(_.toString).mkString(","), 
    s => if (s.isEmpty) Seq.empty else s.split(",").map(Uri(_)).toSeq 
) 

Я работал над этим, используя инструкцию if, но это кажется странным. Я пробовал использовать MappedColumnType.base[Seq[Uri], Option[String]], но это не скомпилировалось. Я думаю, это требует от меня также использовать опцию для Seq, и это не то, что я ищу.

В сущности, я хочу, чтобы пустой Seq приводил к нулевому значению в db и возвращал пустой Seq снова при извлечении. Как это сделать правильно?

+0

's.split (", "). FilterNot (_. IsEmpty)' – Dima

+0

@Dima, который работает для части чтения (более чистый, чем if), но не предотвращает пустую строку в базе данных. – iwein

+0

Ну, я не говорю «пятно», поэтому не уверен, где вы делаете свое письмо. Если это часть 'p =>', то вы можете сделать что-то вроде этого там как один из параметров: 'Some (p) .map (_. MkString (", ")). FilterNot (_. IsEmpty). orNull' – Dima

ответ

0

О, если они обрабатывают опции, вы можете удалить orNull с конца :). Кроме того, обратите внимание, что здесь вы действительно не конвертируете коллекцию в параметр. Вы конвертируете параметр String в параметр. Это делает его лучше? :)

 Смежные вопросы

  • Нет связанных вопросов^_^