2016-07-31 4 views
2

一般的なJdbcDriverを使用してSlickを使用しようとしていて、Scalaタイプの不一致エラーが発生しました。私がSlickとRoll-My-ownのスーパーシンプルなテーブルなしでこれを試してみると、この問題は発生しないので、Slickのより洗練されたScalaの使用に関するエラーが考えられます。Slick/ScalaでジェネリックJdbcDriverを使用しようとするとタイプが一致しません

以下の例では、Slick 3.1.1を使用しています。私はSlick 3.2.0-M1(必要に応じてドライバを変更してドライバを変更する)と同等の機能を試しましたが、同じエラーがあります。

StackOverflowに「タイプミスマッチ」の質問/回答が多数あるようですが、この問題に関連していると解釈できないため、Scala/Slickの使い方が改善されています。

次のコードが生成されます。

情報については
*Error:(37, 25) type mismatch; 
found : slick.lifted.TableQuery[dao.PersonTable] 
required: slick.lifted.TableQuery[_ <: _2.driver.Table[_]] where val _2: test.Test.ProfileUser 
    dbDriver.create(dao.persons) // Creates this error...* 

package test 

import slick.backend.DatabaseConfig 
import slick.driver.JdbcDriver 

trait GenericDriver { 
    val driver: JdbcDriver 
} 

case class PersonRecord(id: Int, name: String) 

trait Person { 
    self: GenericDriver => 

    import driver.api._ 

    class PersonTable(tag: Tag) extends Table[PersonRecord](tag, "persons") { 
    def id = column[Int]("id", O.PrimaryKey, O.AutoInc) 
    def name = column[String]("name") 
    def * = (id, name) <> (PersonRecord.tupled, PersonRecord.unapply) 
    } 

    val persons = TableQuery[PersonTable] 
} 

class Dao(val driver: JdbcDriver) 
    extends Person 
    with GenericDriver 

object Test { 

    def main(args: Array[String]): Unit = { 
    val dbConfig = DatabaseConfig.forConfig[JdbcDriver]("sampleDb") 
    val dbDriver = dbConfig.driver 
    val dao = new Dao(dbDriver) 

    dbDriver.create(dao.persons) // Creates this error... 
    // 
    // Error:(37, 25) type mismatch; 
    // found : slick.lifted.TableQuery[dao.PersonTable] 
    // required: slick.lifted.TableQuery[_ <: _2.driver.Table[_]] where val _2: test.Test.ProfileUser 
    // dbDriver.create(dao.persons) // Creates this error... 
    // 
    } 

    implicit class ProfileUser(val driver: JdbcDriver) extends GenericDriver { 
    import driver.api._ 
    def create(tq: TableQuery[_ <: Table[_]]) = tq.schema.create 
    } 

} 

- build.sbtは次のとおりです。ここ

name := "test_import" 

version := "1.0" 

scalaVersion := "2.11.8" 

libraryDependencies ++= Seq(
    "com.typesafe.slick" %% "slick" % "3.1.1" 
) 
+0

そして、この(外部)の記事は、PDTのさらなる理解を手伝ってくれました。 これにより、同様のエラーメッセージが生成されます。 'エラー:(37,25)タイプの不一致。 が見つかりました:dao.driver.profile.api.TableQuery [_ $ 1]ここでタイプ_ $ 1 <:dao.driver.profile.api.Table [_] (展開先は)slick.lifted.TableQuery [_ $ 1] 必須:slick.lifted.TableQuery [_ <:_2.driver.profile.Table [val] _2:test.Test.ProfileUser dbDriver.create(dao.persons) ' –

答えて

関連する問題