![](/img/trans.png)
[英]java.lang.ClassCastException: org.hibernate.internal.QueryImpl cannot be cast to com.models.User
[英]java.lang.ClassCastException: models.Task cannot be cast to models.Task on Play Framework
我使用Akka actor在Play Framework中創建了工作隊列,然后從全局對象啟動actor系統。 JobManager actor(如下所示)每分鍾檢查一次數據庫,如果有未完成的任務,它將向Worker actor發送消息以對其進行處理。 在此之下,您可以看到我的任務模型。
case class CheckDatabase()
class JobManager extends Actor {
def receive = { case CheckDatabase() => CheckIt }
def CheckIt = {
val allTasks: List[Task] = new Model.Finder(classOf[String], classOf[Task]).all()
val taskBuffer = new ArrayBuffer[Boolean]
for(i <- 0 until allTasks.size){ taskBuffer += allTasks.get(i).isRunning }
if(taskBuffer.forall(taskIsRunning => taskIsRunning == false)){
val nextTask = nextOntheLine
if(nextTask != null ){
val worker = context.system.actorOf(Props[Worker], name = nextTask.id)
worker ! StartWorking(nextTask)
} else {
println("Status: idle...")
}
}
}
def nextOntheLine: Task = {
val tasks = new Model.Finder(classOf[String], classOf[Task])
.where
.eq("isDone", false)
.eq("isCancelled", false)
.eq("isRunning", false)
.orderBy("uploadDate asc")
.findList()
if(tasks.size > 0){
tasks.get(0)
} else {
null
}
}
}
@Entity
public class Task extends Model {
@Id
public String id;
public String email;
public boolean isDone;
public void setIsDone(boolean _isdone){
isDone = _isdone;
}
public boolean isRunning;
public void setIsRunning(boolean _isrunning){
isRunning = _isrunning;
}
public boolean isCancelled;
public void setIsCancelled(boolean _iscancelled){
isCancelled = _iscancelled;
}
@Formats.DateTime(pattern="hh:mm:ss, dd/MM/yyyy")
public Date uploadDate = new Date();
}
它開始正常運行,當我發送請求時,它啟動了作業並完成了作業,但是在處理作業期間(使用JobManager檢查數據庫時),我得到了java.lang.ClassCastException: models.Task cannot be cast to models.Task
錯誤。 如您所見,演員是用Scala編寫的,而我的模型是用Java編寫的。 可能是由那引起的嗎?
我在Java中做另一個類,並重寫了里面的所有方法JobManager
為靜態方法。 然后,我將它們導入了Scala代碼,並解決了問題。 問題似乎在於這是一個Java項目,並且模型根據該項目工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.