【发布时间】:2017-08-18 04:46:36
【问题描述】:
我在 Play for Scala 2.5 中运行 Hibernate 5.x。 Hibernate 访问 SAP Hana 数据库。
当我触摸代码并且 Play 自动编译时会出现问题。在代码编译之后,当我运行应用程序时,如果代码调用 Hibernate 函数,我会在admin.dates.DateHib cannot be cast to admin.dates.DateHib 下面得到异常,其中DateHib 是一个 Hibernate 注释类。请注意,我既不会更改 Hibernate 对象,也不会更改使用 Hibernate 对象的函数。尽管如此,当我在编辑后运行代码时,我得到cannot be cast 错误。
解决方法是重启 Play,但每次触碰代码都无法重启 Play。
我不确定它是否必须解决这个问题,但我在同一个应用程序 Slick 3.1 中运行访问 MySql。
有什么想法吗?
这是失败的代码:
def findLastDayHoliday (month: Int, year: Int) = {
val session = HibernateUtil.sessionFactoryBank.openSession
try {
val query = session.createQuery("from DateHib where month=:month and year=:year")
query.setMaxResults(1)
query.setParameter("year", year)
query.setParameter("month", month)
val list = query.list.asScala.toList.map(_.asInstanceOf[DateHib])
if (list.length>0)
Some(list(0))
else
None
}
catch {
case e:Exception => throw new Exception ("Failure: " + e.getMessage)
}
finally session.close
}
这是个例外:
play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[Exception: Failure in findLastDayHoliday: admin.dates.DateHib cannot be cast to admin.dates.DateHib]]
at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:293)
at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:220)
at play.api.GlobalSettings$class.onError(GlobalSettings.scala:160)
at play.api.DefaultGlobal$.onError(GlobalSettings.scala:188)
at play.api.http.GlobalSettingsHttpErrorHandler.onServerError(HttpErrorHandler.scala:100)
at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:100)
at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:99)
at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:344)
at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:343)
at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)
Caused by: java.lang.Exception: Failure in findLastDayHoliday: admin.dates.DateHib cannot be cast to admin.dates.DateHib
at admin.dates.DateObjDAO.findLastDayHoliday(DateObjDAO.scala:126)
at ds.formula.process.RunFormula.getLastDayHoliday(RunFormula.scala:665)
at ds.formula.process.RunFormula.getFromToDates(RunFormula.scala:610)
at ds.formula.process.RunFormula.run(RunFormula.scala:145)
at ds.formula.process.RunFormula.doTest(RunFormula.scala:69)
at ds.formula.process.RunFormula$$anonfun$test$1.apply(RunFormula.scala:61)
at ds.formula.process.RunFormula$$anonfun$test$1.apply(RunFormula.scala:59)
at login.Authentication$LoggedAction$$anonfun$invokeBlock$1.apply(LoggedAction.scala:39)
at login.Authentication$LoggedAction$$anonfun$invokeBlock$1.apply(LoggedAction.scala:34)
at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:251)
【问题讨论】:
-
猜测一个类加载器问题,导致引用使用同一类的不同版本(因此同一类的不同
Class实例)
标签: scala hibernate playframework playframework-2.0