Pregunta

He experimentado algunos problemas al configurar Slick 2.0.2.Cualquier configuración que haga en una sesión se pierde en la siguiente.Por ejemplo, en la primera sesión creo la tabla y agrego tres personas:

// 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)
  }
}

Todo va bien hasta este momento.El resultado repite las tres personas que agregué.Cuando comienzo una nueva sesión, empiezo a experimentar problemas.

// New session in which the previous data is lost
db withSession { implicit session =>
  contacts foreach { person =>
    println(person)
  }
}

El bloque anterior crea un org.h2.jdbc.JdbcSQLException: Table "CONTACTS" not found excepción.Si edito de la siguiente manera

db withSession { implicit session =>
  contacts.ddl.create
  contacts foreach { person =>
    println(person)
  }
}

luego se borran todos los datos.

veo que el Guía Scalatra para Slick utiliza una configuración similar a la mía.¿Qué estoy haciendo mal?¿Cómo debo hacer que los datos persistan entre sesiones?¿Tiene algo que ver el hecho de que esté usando una base de datos en memoria?

¿Fue útil?

Solución

Dos opciones.

O cree una sesión y manténgala abierta.Eso se puede hacer con un alcance withSession más bajo en la pila de llamadas o db.createSession.

O agregar ;DB_CLOSE_DELAY=-1 a la URL de la base de datos.Eso mantiene viva la base de datos mientras se ejecuta la máquina virtual.

Ver http://www.h2database.com/html/features.html#in_memory_databases

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top