`
netskys
  • 浏览: 48519 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

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吧
分享到:
评论

相关推荐

    hibernate数据库相关操作步骤

    通过使用Hibernate,开发人员可以避免直接编写SQL语句,而是通过面向对象的方式来管理和操作数据。本文将详细介绍使用Hibernate进行数据库操作的步骤。 1. **配置Hibernate** - 创建`hibernate.cfg.xml`配置文件:...

    hibernate:java持久化对象详解02

    例如,使用`save()`或`saveOrUpdate()`方法可以将对象持久化到数据库,`get()`和`load()`用于根据ID获取对象,`update()`和`merge()`用于更新对象,`delete()`则用于删除对象。 事务管理是数据库操作中的关键部分。...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

    6.3 Hibernate用对象标识符(OID)来区分对象 6.4 Hibernate的内置标识符生成器的用法  6.4.1 increment标识符生成器  6.4.2 identity标识符生成器  6.4.3 sequence标识符生成器  6.4.4 hilo标识符生成器  ...

    hibernate一对多项目

    - 查询数据时,可以使用Session的`load()`或`get()`方法获取实体,也可以使用HQL(Hibernate Query Language)或Criteria API进行复杂查询。 4. **级联操作**: - Hibernate支持级联操作,如`CascadeType.ALL`,...

    hibernate官网jar包

    12. **级联操作**:通过`@Cascade`可以配置级联操作,如在删除父对象时,是否同时删除子对象。 13. ** Hibenate Validator**:Hibernate 还集成了Validator框架,用于校验实体对象的属性值,提供了一套强大的验证...

    hibernate必须架包

    - **实体对象的CRUD操作**: 使用Session的save(), update(), delete(), get()和load()方法进行对象的增删改查。 4. **最佳实践** - **合理使用缓存**: 根据应用场景选择合适的缓存策略,避免内存溢出。 - **...

    hibernate3.0电子文档

    Hibernate 是一个开源的ORM框架,它消除了Java应用程序与关系型数据库之间的低效交互,通过将Java对象转换为数据库记录,实现了对象和关系数据的透明映射。Hibernate 3.0是其发展中的一个重要里程碑,引入了许多新...

    hibernate_reference中文版和Hibernate中文手册

    5. CRUD操作:Hibernate提供了便捷的方法来完成创建(save()、persist())、读取(get()、load()、query())、更新(update()、merge())和删除(delete())对象的操作。其中,HQL(Hibernate Query Language)和...

    Java+Persistence+with+Hibernate

    - 级联操作(Cascading):设置关联对象的级联属性,使对父对象的操作自动应用到子对象。 八、查询与检索 1. HQL:类似于SQL,但面向对象,用于查询实体及其关联对象。 2. Criteria API:提供一种更灵活且类型安全...

    hibernate讲义

    - 加载和查询:`session.get()` 用于按主键加载对象,`session.load()` 返回代理对象,`session.createQuery()` 和 `session.createCriteria()` 用于构建 HQL(Hibernate 查询语言)或 Criteria 查询。 5. **事务...

    hibernate5.5.4

    例如,使用Session对象的save()或persist()方法可实现对象的持久化,而get()和load()用于查询,update()和merge()用于更新,delete()则用于删除。 4. **级联操作**: 在关联映射中,Hibernate允许级联操作,这意味着...

    hibernate知识点总结

    - **级联操作**:通过设置CascadeType,使得对父对象的操作自动影响到子对象,简化关联对象的管理。 8. **HQL(Hibernate Query Language)**: HQL是Hibernate提供的面向对象的查询语言,类似于SQL,但操作对象...

    hibernate笔记

    Hibernate 是一个开源的 Java 平台上的对象关系映射(ORM)框架,它简化了数据库操作,使开发者能够通过面向对象的方式来管理和操作数据。本笔记将深入探讨 Hibernate 的核心概念、配置、实体映射、查询语言及缓存...

    Hibernate个人博客设计与实现

    Hibernate支持懒加载和立即加载策略,对于一对多或多对一的关系,可以决定是在加载父对象时同时加载子对象,还是在需要时单独加载。 10. **实体的状态管理** Hibernate管理实体有四种状态:瞬时态、持久态、托管...

    hibernate帮助文档下载

    4. 操作实体:使用Session进行增删改查操作,例如save()、update()、delete()和get()、load()。 5. 开启和提交事务:在进行数据库操作时,需要在Transaction中进行,以确保数据的一致性。 6. 清理:关闭Session和...

    Hibernate开发实战源代码

    6. **CRUD操作**:掌握如何使用Hibernate执行创建(Create)、读取(Read)、更新(Update)和删除(Delete)操作,如`save()`, `get()`, `update()`, `delete()`方法。 7. **查询语言(HQL)**:了解Hibernate特有...

    hibernate 4.3.10.Final

    例如,save()方法用于保存新对象,update()用于更新已有对象,delete()用于删除对象,load()和get()用于加载对象。 4.3 查询:使用Query或Criteria对象构造查询条件,执行后返回结果集,可以是List、单一对象或者...

    hibernate_first_new项目源码

    - Session的save()、saveOrUpdate()、update()和merge()方法:分别用于持久化新对象、更新已有对象、检查对象状态并更新以及合并临时状态的对象。 - Session的get()和load()方法:用于根据主键获取对象,load()...

    Hibernate 手册 第一章 Hibernate入门

    Hibernate 是一个开放源码的Java持久化框架,它为Java开发者提供了一种对象关系映射工具来管理Java应用中的关系数据。本章将带你逐步走进Hibernate的世界,了解其基本概念、安装配置以及如何在实际项目中运用。 1. ...

Global site tag (gtag.js) - Google Analytics