tarde a la fiesta, pero en el caso de que usted está buscando una solución "mejor" en lo que se refiere al problema ScalaQuery, intente esto:
1) Crear clase base asignador con ID
import org.scalaquery.ql.extended.{ExtendedTable => Table}
abstract class Mapper[T](table: String) extends Table[T](None, table) {
def id = column[Int]("id", O PrimaryKey)
}
2) extiende la base mapper usando objeto de clase de caso/compañero (es decir, no tupla base)
case class Foo (bar: String)
object Foos extends _Mapper[Foo]("foo") {
def foo = column[String]("foo")
}
entonces usted puede hacer algo como:
def show: List[Foo] = {
val q = (for { f <- Foos } yield f)
val foos = db withSession {
foos.list map { case t:T => t }
}
render(foos)
}
y tienen un objeto navegable para trabajar con (vs. tupla basada en índices).
Ahora, a veces no desea un gráfico de objeto enorme cuando solo necesita un subconjunto de campos de un grupo de entidades.
Ahí es donde las proyecciones entran, basta con crear una clase de caso que representa el conjunto de campos que desee y, voila, un objeto de proyección navegable para trabajar con:
case class Yum (foo: String, baz: String)
def show: List[Yum] = {
val q = (for { f <- Foos; b <- Bars; if f.id is b.fooID } yield (f.foo, b.baz))
val yums = db withSession {
yums.list map { case t:T => t }
}
render(yums)
}
bastante simple, debe ser encapsulado en un DAO con torta, pero el principio general es: tomar la ruta de clase/objeto de caso.
¡Ten en cuenta que ScalaQuery patea increíbles azz, Zeiger es brillante! (como lo son muchos en la comunidad de Scala, el futuro se ve brillante en la forma de Scala ;-))
Gracias Miles, muy interesante. La pregunta es ¿cómo obtengo el tipo de t2 y lo uso para una definición de clase? Al igual que en el ejemplo anterior, 'clase TupleTypes [T] extiende AnotherClass [T1]' ¿hay alguna forma de obtener T1? – mericano1
¿Podría darme algunos ejemplos de las formas generales de los miembros que planea agregar a 'TupleTypes' y' AnotherClass'. Y también podrías decir si necesitas que haya algún tipo de relación útil entre 'T' y' T1' (es decir, necesitas ser capaz de construir un valor de tipo 'T1' dado valores de tipos' MyClass' y 'T' y/o viceversa)? –
Hola Miles, agradezco tu ayuda. Estoy trabajando con scalaquery y quiero crear una clase base abstracta que tenga una columna de tipo Long (id). Entonces 'TupleTypes [T]' es en realidad 'BaseTable [T]'. Otras clases que se extienden 'BaseTable [T]' tendrán una lista de columnas y el tipo 'T' será una tupla como' (String, Int, Boolean, Date) '. Ahora porque mi 'BaseClass [T]' necesita extender la tabla de escalamiento y proporcionar una tupla con todos los tipos de columnas, 'T1' tendrá que ser' (Largo, Cadena, Int, Booleano, Fecha) '. Espero que esto explique lo que estoy tratando de lograr. – mericano1