2018-06-11 15:02
@aqiang 很可能是你的数据库表中的 uuid 字段前后有不可见字符,先删掉这个 uuid 字段,然后再重新创建一次即可,注意重新创建的时候用手工输入的方式,不要从别的地方 copy
这种事情历史上曾经发生过,最后发现是从别处 copy 来的字段名之后紧随了一个不可见字符,造成了肉眼上看字段存在,但实际不存在
2018-06-10 17:38
@maxwade 关键还是得看应用场景,如果做事务的地方非常多,用 @Before(Tx.class) 配全拦截器会更省代码,类似于放在公网上的互联网项目做事务的地方少用 Db.tx 会很方便
2018-06-10 11:35
@haojay 内容类型转换这个功能不好做,jfinal 社区的文章内容各自有 table 来存,没有改类型这个字段,需要新建 article ,并新建回复,还有 remind、refer 等关联,很麻烦
2018-06-09 20:36
@i++ Db.tx 内部已经 try catch 过了,在得到异常时会 rollback 回滚
你展示的这种情况是嵌套事务,也就是说在 Db.tx 外层还有 Db.tx 或者还有 @Before(Tx.class)。 这种情况当然不会回滚,因为这种情况是等着最外层的事务去回滚的
你去掉 Db.tx 外层的事务,就可以正确回滚了,不管外面是不是有 try catch 都可以
2018-06-09 17:58
getPara() 底层是从 Controller 中的 HttpServletRequest request 属性对象中获取值
但是这个 HttpServletRequest request 的作用域是当前请求,也就是说当前请求(主线程)在执行完毕后会回收或者销毁这个 request 对象
当你新创建的另一个线程去读取 request 对象中的数据时,必然是错误的
简单来说,将 controller 或者 request 对象传入另一个线程,一定是错误的,因为这两类对象的作用域是 “当前请求”,当前请求交互结束,对象生命周期立即结束
所以你在新创建的线程中是在使用一个无用的对象
正确的作法是先使用 getPara() 获取该获取的参数,然后传递给新创建的线程