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吧
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值