2016-07-26 13 views
0

私はスリック3にscalaqueryから移行しようとしているが、コンパイルするときに、次のエラーを取得しています:スカラーからSlick 3.1へ - リストが削除されましたか?

Error:(107, 19) No matching Shape found. 
Slick does not know how to map the given types. 
Possible causes: T in Table[T] does not match your * projection. Or you use an unsupported type in a Query (e.g. scala List). 
    Required level: slick.lifted.FlatShapeLevel 
    Source type: slick.lifted.ProvenShape[TestData] 
    Unpacked type: T 
    Packed type: G 
     (for (test <- testTable) 
       ^

これは変更befor関連するコードです:

case class TestData(id: Int, test_double: Double) 

object TestTable extends Table[TestData]("Test_Table") { 
    var test_value = "" 
    def id = column[Int]("ID_Test", O.PrimaryKey, O.AutoInc) 
    def nep_column = column[Double](test_value) 
    def * = id ~ nep_column <> (TestData, TestData.unapply _) 
} 

def get_data = { 
    db withSession { 
      for (test <- testTable) 
      yield test.* 
      }.list 
} 

と私は変わった後、これがありますそれ:

case class TestData(id: Int, test_double: Double) 

class TestTable(tag: Tag) extends Table[TestData](tag, "Test_Table") { 
    def id = column[Int]("ID_Test", O.PrimaryKey, O.AutoInc) 
    def nep_column = column[Double](test_value) 
    def * = (id, nep_column) <> ((TestData.apply _).tupled, TestData.unapply) 
} 

object testTable extends TableQuery(new TestTable(_)) { 
    var test_value = "" 
} 

def get_data = { 
    Await.result(db.run(
     (for (test <- testTable) 
      yield test.*).result), Duration.Inf) 
} 

だから、単に.result.listを交換して動作するようには思えません。そして、Slick 3では.listへの参照を見つけることができません。それは削除されましたか?

私はここにどのような問題があり、それを解決する方法を知っていますか?

+0

私はスリックに精通してい3+のみ。あなたは 'yield test。*'は必要ないと思うが、 'yield test'だけだと思う​​。 –

+0

基本的には、必要なだけ(結合、フィルタなど)選択したクエリを作成し、ビルド時に '.result'を呼び出します。 –

答えて

1

あなたはまったく理解のために使用する必要はありません。

def get_data: Seq[TestData] = Await.result(db.run(testTable.result), Duration.Inf) 
関連する問題