slick 2.0 error row._1 ошибка в Scala Intellij IDEA 15.0.2

Ниже представлена ​​моя программа 2.0 в Scala IntelliJ IDEA 15.0.2.

Эта программа дает ошибку времени компиляции в IntelliJ IDEA:

Не удается разрешить символ _1

Также прилагаю скриншот ошибки.

import java.sql.Timestamp
import scala.slick.driver.PostgresDriver.simple._

case class User(
                 id: Long,
                 username: String,
                 email: Option[String],
                 password: String,
                 created: Timestamp)

//a simple table called 'users'
class Users(tag: Tag) extends Table[User](tag, "users") {

  def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
  def username = column[String]("username", O.NotNull)
  // an Option[] in the case class maps to a Nullable field here
  def email = column[String]("email", O.Nullable)
  def password = column[String]("password", O.NotNull)
  // this is a hack for postgresql; if you're using another DB, comment this out
  // and the corresponding field in the case class
  def created = column[Timestamp]("created_at", O.NotNull, O.DBType("timestamp default now()"))

  // usernames should be unique
  def idx = index("users_unique_username", (username), unique = true)

  //define the "shape" of a single data record
  //we're saying that an object of class User (our case class) should be returned
  def * = (id, username, email.?, password,created) <> (User.tupled, User.unapply)
}

val connectionUrl = "jdbc:postgresql://localhost/slick?user=slick&password=slick"
Database.forURL(connectionUrl, driver = "org.postgresql.Driver") withSession {
  implicit session =>
    val users = TableQuery[Users]

    // SELECT * FROM users
    users.list foreach { row =>
      println("user with id " + row._1 + " has username " + row._2)
    }

    // SELECT * FROM users WHERE username='john'
    users.filter(_.username === "john").list foreach { row =>
      println("user whose username is 'john' has id "+row._1 )
    }
}

Глючная ошибка в Intellij IDEA

Когда я создал ту же программу в eclipse scala-ide, программа работает нормально и получает результат.

Это существующая проблема или я что-то упустил на своей стороне?


person Rajkumar Natarajan    schedule 02.01.2016    source источник
comment
Мне кажется, что row на самом деле является экземпляром User. Так что ._1 должно быть просто .id, а ._2 должно быть .username. Я понятия не имею, почему это сработало бы в Eclipse.   -  person colinjwebb    schedule 02.01.2016


Ответы (1)


Взгляните на это

class Users(tag: Tag) extends Table[User](tag, "users") {

Если бы ваша таблица возвращала кортежи, это выглядело бы так

Table[(Long, String, Option[String] <...>]

И тогда ваш

println("user with id " + row._1 + " has username " + row._2)

будет действительным. Я думаю, что ваша IDE как-то неправильно настроена и запускает ваши старые коды. Вот как ваши коды могут быть исправлены для компиляции и работы:

// SELECT * FROM users
users.list foreach { user =>
  println("user with id " + user.id + " has username " + user.name)
}


// SELECT * FROM users WHERE username='john'
users.filter(_.username === "john").list foreach { user =>
  println("user whose username is 'john' has id "+ user.id )
}
person nikiforo    schedule 02.01.2016
comment
Я не думаю, что есть какие-либо проблемы с кодом, потому что код одинаков как в intellij IDEA, так и в eclipse scala IDE. Кроме того, версия scala 2.11.7 в обеих IDE. Для вашего предложения кода мы можем использовать таблицу любого пользовательского объекта класса clase или Tuple типов данных OOB. Slick поддерживает оба из них. - person Rajkumar Natarajan; 04.01.2016