JFinal异常:The Table mapping of model not exists

33号小人物 发布于 2015/09/14 21:22
阅读 1K+
收藏 0

@JFinal 你好,想跟你请教个问题:

我在执行一个定时任务的时候,需要对Model对象进行插入记录的操作,但是出现以下错误:

Exception in thread "Timer-0" java.lang.RuntimeException: The Table mapping of model: com.xxx.xxx.model.Change not exists. Please add mapping to ActiveRecordPlugin: activeRecordPlugin.addMapping(tableName, YourModel.class).

然后debug到下面这段代码

public Table getTable(Class<? extends Model> modelClass) {
Table table = modelToTableMap.get(modelClass);
if (table == null)
throw new RuntimeException("The Table mapping of model: " + modelClass.getName() + " not exists. Please add mapping to ActiveRecordPlugin: activeRecordPlugin.addMapping(tableName, YourModel.class).");

return table;
}

发现modelToTableMap里面,明明是有modelClass这个名字的键值对,但是get到的确实null。我程序的另一部分是通过页面去添加Model的一条记录,但是却成功。请问这是什么原因,我已经百度了大半天了,还是解决不了,谢谢了~

加载中
0
JFinal
JFinal
   这个定时任务的启动时机是否在 ActiveRecordPlugin 之前,如果是在之前,则当时是获取不到的。建议将定时任务放在 YourJFinalConfig.afterJFinalStart() 方法之中
33号小人物
33号小人物
回复 @JFinal : 我的配置也是正常的,但是发现了新的现象:http://www.oschina.net/question/asked?id=2132322
JFinal
JFinal
回复 @33号小人物 : 检查一下编译输出 classes 文件的路径是否指向的 WEB-INF/classes,否则系统启动时用的是其它目录的 class 文件,而运行中途使用了 WEB-INF/classes 下的 class 文件,这样就造成了类型不匹配,得不到想要的结果,这种情况通常是肉眼看不出来的
33号小人物
33号小人物
回复 @JFinal : 嗯,启动过程正常,Model的确在modelToTableMap里面,但是就是无法获取得到相应的table。
JFinal
JFinal
回复 @33号小人物 : 跟踪一下ActiveRecordPlugin 的初始化程序,看一下 Model 是否真的被映射过
33号小人物
33号小人物
但是,我另一个model也是在这个定时任务里面,它却可以get得到Map里面的key。而且,定时任务是在config启动之后才执行的。
返回顶部
顶部