这两天在用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,开发人员可以避免直接编写SQL语句,而是通过面向对象的方式来管理和操作数据。本文将详细介绍使用Hibernate进行数据库操作的步骤。 1. **配置Hibernate** - 创建`hibernate.cfg.xml`配置文件:...
例如,使用`save()`或`saveOrUpdate()`方法可以将对象持久化到数据库,`get()`和`load()`用于根据ID获取对象,`update()`和`merge()`用于更新对象,`delete()`则用于删除对象。 事务管理是数据库操作中的关键部分。...
6.3 Hibernate用对象标识符(OID)来区分对象 6.4 Hibernate的内置标识符生成器的用法 6.4.1 increment标识符生成器 6.4.2 identity标识符生成器 6.4.3 sequence标识符生成器 6.4.4 hilo标识符生成器 ...
- 查询数据时,可以使用Session的`load()`或`get()`方法获取实体,也可以使用HQL(Hibernate Query Language)或Criteria API进行复杂查询。 4. **级联操作**: - Hibernate支持级联操作,如`CascadeType.ALL`,...
12. **级联操作**:通过`@Cascade`可以配置级联操作,如在删除父对象时,是否同时删除子对象。 13. ** Hibenate Validator**:Hibernate 还集成了Validator框架,用于校验实体对象的属性值,提供了一套强大的验证...
- **实体对象的CRUD操作**: 使用Session的save(), update(), delete(), get()和load()方法进行对象的增删改查。 4. **最佳实践** - **合理使用缓存**: 根据应用场景选择合适的缓存策略,避免内存溢出。 - **...
Hibernate 是一个开源的ORM框架,它消除了Java应用程序与关系型数据库之间的低效交互,通过将Java对象转换为数据库记录,实现了对象和关系数据的透明映射。Hibernate 3.0是其发展中的一个重要里程碑,引入了许多新...
5. CRUD操作:Hibernate提供了便捷的方法来完成创建(save()、persist())、读取(get()、load()、query())、更新(update()、merge())和删除(delete())对象的操作。其中,HQL(Hibernate Query Language)和...
- 级联操作(Cascading):设置关联对象的级联属性,使对父对象的操作自动应用到子对象。 八、查询与检索 1. HQL:类似于SQL,但面向对象,用于查询实体及其关联对象。 2. Criteria API:提供一种更灵活且类型安全...
- 加载和查询:`session.get()` 用于按主键加载对象,`session.load()` 返回代理对象,`session.createQuery()` 和 `session.createCriteria()` 用于构建 HQL(Hibernate 查询语言)或 Criteria 查询。 5. **事务...
例如,使用Session对象的save()或persist()方法可实现对象的持久化,而get()和load()用于查询,update()和merge()用于更新,delete()则用于删除。 4. **级联操作**: 在关联映射中,Hibernate允许级联操作,这意味着...
- **级联操作**:通过设置CascadeType,使得对父对象的操作自动影响到子对象,简化关联对象的管理。 8. **HQL(Hibernate Query Language)**: HQL是Hibernate提供的面向对象的查询语言,类似于SQL,但操作对象...
Hibernate 是一个开源的 Java 平台上的对象关系映射(ORM)框架,它简化了数据库操作,使开发者能够通过面向对象的方式来管理和操作数据。本笔记将深入探讨 Hibernate 的核心概念、配置、实体映射、查询语言及缓存...
Hibernate支持懒加载和立即加载策略,对于一对多或多对一的关系,可以决定是在加载父对象时同时加载子对象,还是在需要时单独加载。 10. **实体的状态管理** Hibernate管理实体有四种状态:瞬时态、持久态、托管...
4. 操作实体:使用Session进行增删改查操作,例如save()、update()、delete()和get()、load()。 5. 开启和提交事务:在进行数据库操作时,需要在Transaction中进行,以确保数据的一致性。 6. 清理:关闭Session和...
6. **CRUD操作**:掌握如何使用Hibernate执行创建(Create)、读取(Read)、更新(Update)和删除(Delete)操作,如`save()`, `get()`, `update()`, `delete()`方法。 7. **查询语言(HQL)**:了解Hibernate特有...
例如,save()方法用于保存新对象,update()用于更新已有对象,delete()用于删除对象,load()和get()用于加载对象。 4.3 查询:使用Query或Criteria对象构造查询条件,执行后返回结果集,可以是List、单一对象或者...
- Session的save()、saveOrUpdate()、update()和merge()方法:分别用于持久化新对象、更新已有对象、检查对象状态并更新以及合并临时状态的对象。 - Session的get()和load()方法:用于根据主键获取对象,load()...
Hibernate 是一个开放源码的Java持久化框架,它为Java开发者提供了一种对象关系映射工具来管理Java应用中的关系数据。本章将带你逐步走进Hibernate的世界,了解其基本概念、安装配置以及如何在实际项目中运用。 1. ...