2016-09-02 12:12

对于 model 来说,只要在 arp.addMapping(...) 一次性搞定,在使用过程中不再需要处理,而 Db.find/query 由于没有建立 table 的 meta 映射,所以,需要在使用过程中临时指定

2016-09-02 12:10

@java180 再补充一句:无论是 model 还是 Db,当主键名称为 "id" 时就不需要指定了,在没有指定 idName 时,jfinal 会使用默认的名称 "id",这个默认名称还可以在 Dialect 中可以自己指定

2016-09-02 11:54

@java180 其实我的第一个回复已经说过了,model 主键要使用 arp.addMapping(...) 的第二个参数指定 idName,Db 的相关方法需要临时指定 idName。
此外, dao 的 update() 绝对不可以去调用它,这个在手册中强调过,dao 是全局共享的,只能用于查询

2016-09-02 11:07

@java180 调试一下,看 update() 的时候,主键所对应的值是不是为 null? 没有值的时候才会报这个异常,你是不是在取值的时候没有取主键值?

2016-09-02 10:43

@java180 感谢支持社区发展

2016-09-02 10:43

@java180 多多关注社区动态,社区会一直有好用的功能添加

2016-09-02 10:40

@java180 一定可以的,可能是别的原因造成的,例如eclipse自动编译是否打开,修改的代码是否生效之类的错误

2016-09-02 10:38

@java180 arp.addMapping(...) 的时候指定了 idName 没有? 方法原型是:addMapping(String tableName, String primaryKey, Class> modelClass),注意第二个参数就是主键名称,如果是复合主键就用逗号分隔: "id1, id2"

2016-09-02 10:23

@chenwang 聪明的人解决问题,智慧的人消灭/避免问题,愚蠢的人制造问题。就好比 Hibernate 制造了无数的问题

2016-09-02 10:21

主键名可以是任意合法名称,不一定是 "id"
如果是 Model ,需要在 arp.addMapping(tableName, idName, modelClass) 时指定这个 idName,如果使用 jfinal 2.2 生成器,会自动生成映射,不需要处理
如果是 Db.find 的形式查询,需要在查询的时候临时提供 idName,例如:Db.findById(tableName, idName, idValue)

2016-09-01 15:41

@绝望的八皮 主要看一下这个版本的 changelog: http://www.oschina.net/news/69461/jfinal-2-1-released 注意一下这个 changelog 中谈到的 paginate 方法的改进可以忽略,因为 select 与 sqlExceptSelect 合并的这个改进,在后面的版本中被证实并不好,所以又改回去了

2016-09-01 15:39

@绝望的八皮 更新其实很简单,就是将 jfinal 升级到 2.2,基本上就都是一些改改类名,方法名的事情,将 jfinal 版本号改为 2.2 以后,按照 eclipse、IDEA 错误提示的地方分分钟就改完了

2016-09-01 15:12

@小鑫要宵夜 如果 controller 里面 try catch,只要再接着向上抛出被捕获的异常,拦截器仍然可以收到,如果吃掉异常不抛出来,上层就接收不到了

2016-09-01 15:03

@海哥 假定字段是 int(12),这种情况本身就对应了 jdbc 的 Long 型,难道干预并转换? 其实干预也不难,在生成的 BaseModel 中的 getter 方法中这样 return getNumber(attr).intValue()