hibernate save后 get 子对象的问题(实体数据)
这两天在用aop 写个发信机制,由于 发信模板用的是 spring的velocity 正好 顺便学习了 其中的 el表达式
#if #end #foreach #end
…………跑题了
总之 就是我想 直接给 interceptor 传递一个 对象 剩下取值 就全扔给 view了
其实 我一直很喜欢 对象 view层 是对象 到了controller 也是对象 vo po
所以我比较欣赏用 json 尤其 是 getForm 和 setForm 时 对于 table的 list更不用说了,…………又跑题了
比如用户注册 我的实体比较乱
User 下 有 one-to-many 的 Address one-to-one 的 Company 等
更有些 Const 是 在table 保存的 codeTable 这样 几乎也是一对一
比如 birthday 就是一个CodeList 对应
CodeLis.id=111;
CodeList.value="1985"
不过前台 只能这样写
name='user.birthday.id' name='user.name'这样我 在action 接受到 的就是一个 user 用 hibernate save 后 db里 也出了数据 然后 我直接
public User todo(User user){ user=this.save(user); user=this.get(user.getId()); System.out.println(user.getBirthDay.getId()) ; System.out.println(user.getBirthDay.getValue()) ;}结果 111 null
这就很奇怪 通过跟踪 其实 当执行完 save 后db 里已经有了数据 可是什么 查不到,我看了hb 生成的sql语句 发现 只差了 User 没有差 Address 和 Birthday 莫非是 lazy false 的原因 但 一对一 不可能啊,
最后想了想应该是 hb 缓存的原因 缓存 存放 对应 key value key 为id value 为po 因为 我从前台传进了id 所以 hb 从缓存中得到了 key 就不会去查db 自然 value也不会更改
于是乎 我调用
public void clearCache() {getHibernateTemplate().clear();}public User todo(User user){ user=this.save(user); this.clearCache(); user=this.get(user.getId()); System.out.println(user.getBirthDay.getId()) ; System.out.println(user.getBirthDay.getValue()) ;}这样保证 我在 get之前清空session 拿到的肯定是 db 里的数据
其实仔细想了下 只要我在save后 把 id改掉就ok 不过 又担心 save后 其实 vo 已经成了po 改id 会不会 导致 update 干脆 就省事的 clear吧