是否可以/建议在Slick中重用StaticQuery对象?

时间:2013-09-09 17:19:01

标签: scala slick

我打算一次定义我的Slick查询并在需要时重用它们,但我遇到了一个N​​ullPointerException,我追溯到在同一个会话中使用两次的相同StaticQuery0对象。 Query和StaticQuery对象是否意味着以这种方式重用?有没有更好的方法来解决这个问题(例如每次都创建一个新的查询对象?)或者我是否通过其他错误触发了异常?

以下是错误的详细信息。 name.query是一个通过StaticQuery.queryNA创建的StaticQuery0。在不同的会话中重用它:

import Database.threadLocalSession
val points = db withSession {
  name.query.to[Vector]
}
val points2 = db withSession {
  name.query.to[Vector] // No problem!
}

在同一会话中第二次使用它会抛出NullPointerException:

import Database.threadLocalSession
val points = db withSession {
  name.query.to[Vector]
  name.query.to[Vector] // Kablam!
}

以下是例外:

java.lang.NullPointerException
    at com.mysql.jdbc.ConnectionImpl.initializeResultsMetadataFromCache(ConnectionImpl.java:5552)
    at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1368)
    at scala.slick.jdbc.StatementInvoker.results(StatementInvoker.scala:34)
    at scala.slick.jdbc.StatementInvoker.elementsTo(StatementInvoker.scala:17)
    at scala.slick.jdbc.Invoker$class.foreach(Invoker.scala:90)
    at scala.slick.jdbc.StatementInvoker.foreach(StatementInvoker.scala:10)
    at scala.slick.jdbc.Invoker$class.build(Invoker.scala:66)
    at scala.slick.jdbc.StatementInvoker.build(StatementInvoker.scala:10)
    at scala.slick.jdbc.Invoker$class.to(Invoker.scala:74)
    at scala.slick.jdbc.StatementInvoker.to(StatementInvoker.scala:10)
    at scala.slick.jdbc.UnitInvoker$class.to(Invoker.scala:152)
    at scala.slick.jdbc.StaticQuery0.to(StaticQuery.scala:        
    at (the second call to name.query.to[Vector])

0 个答案:

没有答案