2015-07-30 5 views
6

Questa domanda è stato chiesto e ha risposto per chiazza di petrolio 1 e 2, ma le risposte non sembrano essere validi per chiazza di petrolio 3.Come implementare enumerazioni in scala slick 3?

Il tentativo di utilizzare il modello in How to use Enums in Scala Slick?,

object MyEnumMapper { 
    val string_enum_mapping:Map[String,MyEnum] = Map(
    "a" -> MyEnumA, 
    "b" -> MyEnumB, 
    "c" -> MyEnumC 
) 
    val enum_string_mapping:Map[MyEnum,String] = string_enum_mapping.map(_.swap) 
    implicit val myEnumStringMapper = MappedTypeMapper.base[MyEnum,String](
    e => enum_string_mapping(e), 
    s => string_enum_mapping(s) 
) 
} 

Ma MappedTypeMapper non è disponibile da quando è stato selezionato 1, e il suggerimento MappedColumnType per slick 2 non è più disponibile, nonostante sia documentato here.

Quali sono le ultime migliori pratiche per questo?

+0

'MappedColumnType' è ancora un lavaggio e lo uso spesso in chiazza di petrolio 3.0 – Krever

risposta

9

Cosa intendete esattamente per MappedColumnType non è più disponibile? Viene fornito con la solita importazione del driver. Mappatura un enum in una stringa e viceversa utilizzando MappedColumnType è piuttosto semplice:

object MyEnum extends Enumeration { 
    type MyEnum = Value 
    val A = Value("a") 
    val B = Value("b") 
    val C = Value("c") 
} 

implicit val myEnumMapper = MappedColumnType.base[MyEnum, String](
    e => e.toString, 
    s => MyEnum.withName(s) 
) 
+0

Il mio male, io non sono sicuro che ora il motivo per cui ho pensato che era il caso. – kbanman

+0

Il mappatore implicito dovrebbe trovarsi all'interno dell'oggetto enum sebbene, no? –

+1

@CedricReichenbach È solo un esempio. Puoi posizionarlo dove preferisci, ma assicurati che sia nel mirino del compilatore quando necessario. – Roman