Как получить объект класса как результат, а не кортежи в ScalaQuery? - PullRequest
2 голосов
/ 25 мая 2011

Я начал свой первый проект в Scala и ScalaQuery. Пока что оба выглядят хорошо и многообещающе, хотя время от времени у меня возникают небольшие трудности.

Может кто-нибудь объяснить мне, как получить объект класса (в данном случае класс домена с 12 столбцами) вместо кортежей. Приведенный ниже запрос возвращает кортежи, но проблема в том, что мне нужно около 9 столбцов (или всех столбцов) таблицы без указания имени каждого столбца в результатах запроса. Класс домена уже имеет *, определяющий все столбцы, тогда почему в приведенном ниже запросе возвращается кортеж вместо объекта 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 Ответ

6 голосов
/ 21 октября 2011

Создайте объект, который расширяет 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
...