Wybór jednego wiersza za pomocą id powinien być prostą rzeczą do zrobienia, ale mam trochę problemów z ustaleniem, jak zmapować to do mojego obiektu.Slick select select by id
Znalazłem this question, który szuka tej samej rzeczy, ale udzielona odpowiedź nie działa dla mnie.
Obecnie mam to, co działa, ale nie wydaje się tak eleganckie, jak powinno być.
def getSingle(id: Long):Option[Category] = withSession{implicit session =>
(for{cat <- Category if cat.id === id} yield cat).list.headOption
//remove the .list.headOption and the function will return a WrappingQuery
}
czuję się coraz listę następnie biorąc headOption
tylko nieporęczne i niepotrzebne. Muszę czegoś przegapić.
Jeśli to nie pomaga, tutaj jest bardziej mojego kodu Kategoria
case class Category(
id: Long = 0L,
name: String
)
object Category extends Table[Category]("categories"){
def name = column[String]("name", O.NotNull)
def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
def * = id ~ name <> (Category.apply _, Category.unapply _)
...
}
Czy istnieje prostszy sposób, aby po prostu opcję [T] z wykorzystaniem ID Slick?
Rozwiązanie Wystąpił błąd sterownika. Nie mogłem użyć .firstOption
, ale zaktualizowałem do mysql jdbc 5.1.25 i wszystko jest dobrze!
Jeśli używam pierwszego opublikowanego przez ciebie rozwiązania, otrzymuję komunikat" błąd w składni SQL w pobliżu "OPCJA SQL_SELECT_LIMIT = DEFAULT'' – kingdamian42
Może to być problem ze sterownikiem. Spójrz na http://stackoverflow.com/questions/15113707/error-code-1064-sql-state-42000-you-have-an-error-in-your-sql-syntax – Nilanjan
Zaktualizowano do '" mysql " % "mysql-connector-java"% "5.1.25" '. Działa świetnie, dzięki! – kingdamian42