2017-02-16 25 views
0

Могу ли я иметь собственный столбец в Slick (Я хочу, чтобы класс case был столбцом, который представляет JSON).Пользовательский столбец в slick

case class Segment(isNative: Option[Boolean], origin: Option[List[String]],whitelist: Option[Whitelist]) 

def seg = column[Option[Segment]]("segment") 

ответ

1

Уверенный, вы можете - это вопрос пользовательского сопоставления. Вот как это выглядит, если вы хотите хранить String в БД:

implicit val segmentColumnType = MappedColumnType.base[Segment, String](
    segment => ???, // logic here to convert Segment to JSON string 
    string => ??? // logic here to convert JSON string to Segment case class 
) 

Затем вы определяете свой столбец следующим образом (что на самом деле ваш код):

def seg = column[Option[Segment]]("segment") 

Вы можете использовать выше, то и в результаты и запросы, например как это:

MyTable 
     .filter(_.segment === Segment(Some(true), None, None) 
     .result 

Просто имейте в виду, вы должны иметь это неявное (segmentColumnType) в области видимости в местах, когда вы используете этот разговор (определение столбца, запросы и т.д.).