Tablas
Se definen objetos Table asociados a las tablas de la base de datos. No se debe añadir estado dentro de estos objetos. Se pueden definir métodos . No se deben definir en una localización static, por ejemplo dentro de otros objetos.Las columnas se definen con def , no con val . Se usa el método column . Cada columna tiene un tipo Scala
Dos tablas que se usarán en diversos ejemplos Definiciones de columnas con varios tipos y opciones
object Projects extends Table[Project]("project") {
implicit val javaUtilDateTypeMapper = MappedTypeMapper.base[java.util.Date, java.sql.Date](
x => new java.sql.Date(x.getTime),
x => new java.util.Date(x.getTime)
)
def id = column[Option[Int]]("id", O.PrimaryKey, O.AutoInc)
def createTime = column[Date]("createTime", O.NotNull)
def autoInc = * returning id
def * = id ~ title ~ content ~ author~ teamId ~ createTime <> (Project.apply _, Project.unapply _)
}
object ProjectUserRel extends Table[(Option[Int],Option[Int])]("projectUserRel") {
def projectId = column[Option[Int]]("projectId")
def userId = column[Option[Int]]("userId")
def * = projectId ~ userId
def projectFK = foreignKey("project_fk", projectId, Projects)(a => a.id)
def userFK = foreignKey("user_fk", userId, Users)(b => b.id)
}
Las tablas requieren un método * conteniendo la proyección por defecto. Esta proyección describe el resultado obtenido cuando se obtienen filas a partir de una consulta. La proyección puede añadir nuevas columnas, con valores calculados, u omitir otros.
La tabla Project está mapeada a un tipo propio. Se añade en la proyección un mapping bidireccional con el operador <>

No hay comentarios:
Publicar un comentario