Jfinal实体类添加不属于表字段的属性,解决 The attribute name does not exist: xxx异常

异常信息:com.jfinal.plugin.activerecord.ActiveRecordException: The attribute name does not exist: XXX

 

背景:在Jfinal框架中,实体类JavaBean需要和数据库表的字段绑定,使用注解@Table(tableName = "tableName", primaryKey = "OL_NBR"),来绑定数据库表,和主键。不需要写列字段属性,直接写setter,getter方法,其中set,get中字段对应表中字段。

	public void setCityId(String cityId) {
		set("CITY_ID", cityId);
	}

	public String getCityId() {
		return getStr("CITY_ID");
	}

问题出现:当我们业务需要实体类中增加其他表字段(不在当前实体类对应表中);比如Student 表中有 id、name、 age、 sex等字段,实体类也对应这4个字段的setter getter方法,现在我想加一个字段,总共选修了多少门课程:course_count, 于是在student中增加 setCourse_count, getCourse_count两个方法。于是, new 一个student后,然后直接set

Student student = new Student();
student.setCourse_count(3);

这段代码,看起来没问题,写个main(),静态的代码执行也没问题。但是当项目启动时,就会抛出异常:The attribute name does not exist: XXX, 

原因:当我们调用 setter方法时,实际是执行的setter方法里面 set(attr, value)方法,也就是Jfinal 框架中抽象类Model的 public M set(String attr, Object value)方法,该方法在 setter前会检查 com.jfinal.plugin.activerecord有没有和数据库表绑定,就是前面 @Table注解的表名,如果绑定了那么久检查表中是否存在该字段,不存在就抛出该异常,如下图:

 同样,如果直接student的set(String attr, Object value)方法

Student student = new Student();
student.set("course_count", 3);

也是进入Model里面,同样抛出异常。

解决:

聪明如你,能找到Model这个抽象类,那一定会多看一些其他的方法实现。就在 set方法下面紧挨着就有一个put方法:

方法中 校验表中是否存在该字段的逻辑是注释掉的,我使用的是Jfinal.4.9版本。思考:我想这也应该是官方后来预想到的,才扩展的吧。不管怎么说,用就可以了。

 正确的做法,就是使用 Model.put(String key, Object value), 

Student student = new Student();
student.put("course_count",3);

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值