公司自有平台(非web平台),有代码热更新机制,目前使用Ehcache 做缓存,缓存model (Teller)如下:
public class Teller extends Model<Teller> {
/**
*
*/
private static final long serialVersionUID = 8675422496633387615L;
public static final Teller dao = new Teller();
}
以下通过model 访问数据库,访问缓存:
public void logTellerInfo(){
final Teller teller = Teller.dao.findById("1");
Logger.info("--------------------%s", teller.get("teller_name"));
Teller teller2 = Teller.dao.findFirstByCache("routerTable", "key1", "select * from teller_info");
Logger.info("-----++++++++----%s", teller2.get("teller_name"));
}
在上面代码通过 Teller.dao.findFirstByCache获取缓存model数据,平台启动时执行不会报错,当部署jar到平台时执行代码热部署后,调用 logTellerInfo 方法出现类型转换错误,具体如下:
[19:45:46.744][E]ERROR TYPE:[E],ERROR CODE:[ACMP0E001],ERROR MESSAGE:[java.lang.ClassCastException: tc.UPPS.HKCheque.model.Teller cannot be cast to tc.platform.plugin.activerecord.Model]
[19:45:46.745][E]java.lang.ClassCastException: tc.UPPS.HKCheque.model.Teller cannot be cast to tc.platform.plugin.activerecord.Model
at tc.platform.plugin.activerecord.Model.findFirstByCache(Model.java:847)
at tc.platform.plugin.activerecord.Model.findFirstByCache(Model.java:859)
明明 Teller 派生于 activerecord.Model,怎么会转换不了呢?我用得JFinal 把呢本是 2.3 版,恳请大家帮忙看下会是什么可能原因导致的。