バージョン
Play Framework 2.2.2
slick 2.0.1
play-slick 0.6.0.1
build.sbtに下記を追加する。
"com.typesafe.slick" %% "slick" % "2.0.1", "org.slf4j" % "slf4j-nop" % "1.7.6", "com.typesafe.play" % "play-slick_2.10" % "0.6.0.1"
application.confでevolutionを有効にし、slickでテーブルを作る対象をmodels.*で指定する。
evolutionplugin=enabled slick.default="models.*"
上で指定したパッケージ配下にmodelを作成
package models
import play.api.db.slick.Config.driver.simple._
import java.sql.Date
import models.dao.DAO
case class Twitter(id: Int, word: String, ins_date: Date, upd_date: Date, ng_flg : Boolean)
class Twitters(tag: Tag) extends Table[Twitter](tag,"twitter"){
def id = column[Int]("id",O.PrimaryKey,O.AutoInc)
def word = column[String]("word",O.NotNull)
def ins_date = column[Date]("ins_date",O.NotNull)
def * = (id,word,ins_date) <> (Twitter.tupled,Twitter.unapply)
}
object Twitters extends DAO{
def insert(word:String,ins_date:Date)(implicit s: Session) = {
Twitters map{
r => (r.word,r.ins_date)
} +=(word,ins_date)
}
def findByWord(word:String)(implicit s: Session):List[Int] = {
Twitters filter {
_.word === word
} map {
_.id
} list()
}
}
DAOは分けてこう書いておくとよいと見かけたので、この形で作成。
ちなみにTableを継承してないclassがslickの対象パッケージにいるとエラー出るので別の階層にしないといけない。
package models.dao
import models.h2.Twitters
import scala.slick.lifted.TableQuery
private[models] trait DAO{
val Twitters = TableQuery[Twitters]
}
ひととおり揃えたのでplay runして実行させるとエラーが出た。。。
エラーメッセージ
Found a matching object: modules.Twitter for modules.Twitter but it is not a Slick Table and a wildcard was not specified"
テーブルとして見てもらえてないようなメッセージ。
application.confの指定を*でなく指定する形の以下にしてみたもののだめ。
slick.default="models.Twitters"
結局、この形で記述してみたらうまくいきました。(h2はDBにh2database使ってるため)
最初のだとdaoとTwitter.scalaが同一ディレクトリにいるのがだめなようで、
指定した場所にTable以外のものが入ってないようにしないといけないようです。
slick.default="models.h2.*"
参考URL
http://akiomik.hatenablog.jp/entry/2014/02/23/033444
http://windymelt.hatenablog.com/entry/2014/03/30/191152
https://github.com/freekh/play-slick/blob/6b49ec019e00158c96df12d673856c53830ed1e6/code/src/main/scala/play/api/db/slick/ddl/TableScanner.scala
http://nilfigo.hatenablog.com/entry/2013/09/10/173552
0 件のコメント:
コメントを投稿