Slick2.0.2のセットアップ中にいくつかの問題が発生しました。あるセッションで行った構成は、次のセッションでは失われます。たとえば、最初のセッションでは、テーブルを作成して3人を追加します。
// H2 in-memory database
lazy val db = Database.forURL("jdbc:h2:mem:contacts", driver="org.h2.Driver")
// Contacts table
lazy val contacts = TableQuery[ContactsSchema]
// Initial session
db withSession { implicit session =>
contacts.ddl.create
// Inserts sample data
contacts += Person("John", "123 Main street", 29)
contacts += Person("Greg", "Neither here nor there", 40)
contacts += Person("Michael", "Continental U.S.", 34)
// Successfully retrieves data
contacts foreach { person =>
println(person)
}
}
これまでのところ、すべて順調です。出力は、私が追加した3人を繰り返します。新しいセッションを開始すると、問題が発生し始めます。
// New session in which the previous data is lost
db withSession { implicit session =>
contacts foreach { person =>
println(person)
}
}
上記のブロックはorg.h2.jdbc.JdbcSQLException: Table "CONTACTS" not found
例外を作成します。次のように編集すると
db withSession { implicit session =>
contacts.ddl.create
contacts foreach { person =>
println(person)
}
}
その後、すべてのデータが消去されます。
SlickのScalatraガイドは、マイニングと同様の構成を使用していることがわかります。私は何が間違っているのですか?セッション間でデータを永続化するにはどうすればよいですか?インメモリデータベースを使用しているという事実は、それと関係がありますか?
2つの選択肢。
セッションを作成して開いたままにします。これは、コールスタックまたはdb.createSessionの下位にあるwithSessionスコープを使用して実行できます。
または;DB_CLOSE_DELAY=-1
、データベースのURLに追加します。これにより、VMが実行されている限りdbが存続します。
http://www.h2database.com/html/features.html#in_memory_databasesを参照してください
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加