Я закодировал список значений в одном столбце базы данных, присоединив их к разделителю. Это прекрасно работает, за исключением случаев, когда список пуст. В этом случае столбец базы данных заполняется пустой строкой, а при обратном отображении это дает мне 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 снова при извлечении. Как это сделать правильно?
's.split (", "). FilterNot (_. IsEmpty)' – Dima
@Dima, который работает для части чтения (более чистый, чем if), но не предотвращает пустую строку в базе данных. – iwein
Ну, я не говорю «пятно», поэтому не уверен, где вы делаете свое письмо. Если это часть 'p =>', то вы можете сделать что-то вроде этого там как один из параметров: 'Some (p) .map (_. MkString (", ")). FilterNot (_. IsEmpty). orNull' – Dima