JFinal异常:The Table mapping of model not exists
@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的一条记录,但是却成功。请问这是什么原因,我已经百度了大半天了,还是解决不了,谢谢了~
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
但是,我另一个model也是在这个定时任务里面,它却可以get得到Map里面的key。而且,定时任务是在config启动之后才执行的。
回复
跟踪一下ActiveRecordPlugin 的初始化程序,看一下 Model 是否真的被映射过
回复
嗯,启动过程正常,Model的确在modelToTableMap里面,但是就是无法获取得到相应的table。
回复
检查一下编译输出 classes 文件的路径是否指向的 WEB-INF/classes,否则系统启动时用的是其它目录的 class 文件,而运行中途使用了 WEB-INF/classes 下的 class 文件,这样就造成了类型不匹配,得不到想要的结果,这种情况通常是肉眼看不出来的
回复
我的配置也是正常的,但是发现了新的现象:http://www.oschina.net/question/asked?id=2132322
这个定时任务的启动时机是否在 ActiveRecordPlugin 之前,如果是在之前,则当时是获取不到的。建议将定时任务放在 YourJFinalConfig.afterJFinalStart() 方法之中