Hibernate 中的点对点更新
来源:互联网 发布:mac不能上网 编辑:程序博客网 时间:2024/06/05 22:03
数据库中的更新时十分常见的操作,Hibernate 默认生成的更新代码是全局更新,即无论用户更改了多少内容,都会更新整个持久化对象,这严重影响着程序的效率,特别是数据库中存有论文、图像等大型数据时,此时我们需要实现点对点更新,即更改多少就更新多少。
实现点对点更新的操作有多种:
方法一
在不参与更新的域上面加 @Column(updatable=false) 注解:
1: @Column(updatable=false)
2: private String locale;
方法二
使用 HQL(EJBQL) 语句实现点对点更新:
1: Session session = sessionFactory.getCurrentSession();
2: session.beginTransaction();
3: Query query = session.createQuery("update Apple a set a.color='Red' where id=13 and size=13");
4: query.executeUpdate();
5: session.getTransaction().commit();
需要注意的是,这里的 Query 是 org.hibernate.Query ,HQL 语句里面的 Apple 是类名,所以是区分大小写的。
这种有程序员指定语句的方法十分灵活,故使用的较多。
方法三
还有一种仅适用于 XML 中的方法。在 Apple.hbm.xml 文件中
1: <class name="cn.cdp.hibernate.Apple" dynamic-update="true">
2: <id name="id">
3: <generator class="uuid">generator>
4: id>
5: <property name="color" />
6: <property name="locale" />
7: class>
此时当我们运用一般方法更新数据时候,就可以进行点对点更新了:
1: Session session = sessionFactory.getCurrentSession();
2: session.beginTransaction();
3: Apple apple = (Apple)session.get(Apple.class, "40280e812e1ed1f5012e1ed1f8a00013");
4: apple.setLocale("US");
5: session.update(apple);
6: session.getTransaction().commit();
这个更新不会涉及到 color 属性的更新。
常见的用法是方法二。
- Hibernate 中的点对点更新
- Hibernate 中的点对点更新
- Hibernate中的Annotation和更新数据库
- 点对点
- 【Hibernate】Hibernate中的级联保存更新cascade错误分析
- .NET Compact Framework 中的点对点消息队列
- .NET Compact Framework 中的点对点消息队列
- NET Compact Framework 中的点对点消息队列
- SpringBoot中的WebSocket点对点发送消息
- hibernate更新
- hibernate更新
- Hibernate 中的更新数据的方法(2)
- hibernate中的update方法只更新部分字段的方法
- 代码优化:Hibernate中的动态更新 dynamic-update
- 点对点隧道协议(PPTP)-rfc2637(未完待更新)
- hibernate更新数据问题
- hibernate一对多 更新
- hibernate动态更新
- Oracle中批量删除数据
- 寒假
- linux下LVM添加磁盘实践操作
- 在lighttpd上使用fastcgi方式部署hg server[转载]
- Hibernate 中的联合主键解决方案
- Hibernate 中的点对点更新
- 4.9 Makefile的特殊目标
- ubuntu 全部的窗口的关闭按钮,最大化、最小化按钮消失的解决办法
- Hibernate 关联关系
- 在 PowerDesigner 中连接 MySQL 数据库
- Hibernate 继承映射
- linux内核引导参数
- 算法导论 Exercise 3.1-3
- openfire fastpath部署,以及 webchat 不显示 workgroup 问题