如何在ScalaQuery中将类对象作为结果而不是元组?

时间:2011-05-25 14:25:57

标签: scala scalaquery

我已经在Scala和ScalaQuery中开始了我的第一个项目。到目前为止,虽然我偶尔会遇到一些困难,但两者看起来都很好并且看好。

有人可以解释一下如何获取一个类对象(在这种情况下,Domain case类有大约12列)而不是元组。 下面的查询是返回元组,但问题是我需要表的大约9列(或所有列),而不在查询yield中提供每个列名。 Domain类已经定义了所有列,那么为什么下面的查询会返回元组而不是Domain对象,这样我就可以使用Domain.name,Domain.level而不是在返回的元组中计算位置。

val ext_id = 'ns1.amazon.com'
val name = "www.getcrazy.com"
val validDomains = for {p <- Domain where { p => (p.ext_id is ext_id) && (p.domain_name is name) && (p.is_deleted is false) && (p.result_code is "1000")}} yield *

for(pp <- validDomains) {
            logger.debug("State is " + pp._6 + " for domain ID - " + pp._1)
}

有什么建议吗?

谢谢, 爬完

1 个答案:

答案 0 :(得分:6)

创建object that extends org.scalaquery.ql.basic.BasicTable。例如,

case class Community (id:String, name:String, latitude:Double, longitude:Double)
object CommunityTable extends Table[Community]("Communities") {
  def id = column[String]("ID", O PrimaryKey, O NotNull, O DBType "uniqueidentifier")
  def name = column[String]("Name", O NotNull, O DBType "varchar(255)")
  def longitude = column[Double]("Longitude")
  def latitude = column[Double]("Latitude")
  def * = id ~ name ~ longitude ~ latitude <> (Community, Community.unapply _)
}

有了这个,您只需查询CommunityTable并获得List[Community]返回:

val c: List[Community] = CommunityTable.where(c => (c.name startsWith term)).list