Slick jak wykonać operacje na dowolnej tabeli z polem Id

Slick jak wykonać operacje na dowolnej tabeli z polem Id
UB
  • Rejestracja: dni
  • Ostatnio: dni
0

Jak mogę potraktować wiele tabel polimorficznie tzn chcę usunąć jeden rekord o danym id z podanej w stringu tabeli?
Próbowałem aby tabela implementowała np a potem rzutować w for

Kopiuj
  trait Idable {
    def id: Column[Int]
  }

albo rzutować w for na typ strukturalny

Kopiuj
  type TableWithId = {
    def id: Column[Int]
  }

Niestety żadne z podejść nie działa.
Albo zamiast usunięcia, wyświetlenie całego rekordu.
Mam metodę

Kopiuj
def getTableByName(s: String): TableQuery[_] = s.toLowerCase match {
    case "titles" => titles
    case "subjects" => subjects
    case "teachers" => teachers
    case "courseTypes" => courseTypes
    case "courses" => courses
    case "users" => users
    case "messages" => messages
  }

i chcę to wykorzystać np tak

Kopiuj
 def delete(table: String, id: Int) = AdminAction {
    implicit request =>
      execute { implicit session =>
        val q = for (t <- getTableByName(table) if t.asInstanceOf[Idable].id === id) yield t
        q.delete
      }

A może to miejsce na użycie Plain SQL? Tylko wtedy będę musiał zabezpieczyć się przed SQL Injection.

n0name_l
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2412
0

Co chcesz zrobic? Bo wyglada jak wywazanie otwartych drzwi.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.