バージョン
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 件のコメント:
コメントを投稿