在调用Hibernate的update方法时会更新对象的全部字段,若对象属性值为null,则相应的数据库字段也会被更新为空值。
通常的做法
是先将需要更新的对象加载上来,再将需要更新的属性值一个个的setter到对象中,但这样显然影响了代码的可读性,而且在使用
Struts2+hibernate进行开发时,页面传递参数后Struts2会将对象进行自动赋值,已经赋值的对象在更新前又要进行一次手动赋值再
update,这样明显散失去了sturts2的自动赋值的意义。
解决方法:
将需要更新的对象加载上来后,利用BeanUtils类的copyProperties方法,将需要更新的值copy到对象中,最后再调用update方法。
注
意:这里推荐使用的方法并非org.apache.comm*****.beanutils包中的方法,而是
org.springframework.beans.BeanUtils中的copyProperties方法。原因是Spring工具类提供了
copyProperties(source, target,
ignoreProperties)方法,它能在复制对象值的时候忽略指定属性值,保护某些值不被恶意修改,从而更安全的进行对象的更新。此外,根据一些
测试结果spring中的copyProperties方法效率要高于apache的方法(这点未作进一步验证)。
参考代码:
Admin persistent = adminService.load(id);// 加载对象
BeanUtils.copyProperties(admin, persistent, new String[]{"id", "username"});// 复制对象属性值时忽略id、username属性,可避免username被恶意修改
adminService.update(persistent);// 更新对象
具体代码可参考SHOP++源代码。
以上为SHOP++技术教程。来源:http://www.shopxx.net
分享到:
相关推荐
未来 Hibernate是一个强大的Java持久化框架...以上各点提供了实现这一目标的基础,但实际项目中可能还需要解决更多特定于数据库的问题。通过良好的设计和测试,可以确保Hibernate应用程序在多种数据库环境下稳定运行。
Hibernate 配置文件加密解密方案 在本文中,我们将讨论如何在 Hibernate 配置文件中对数据库密码进行加密和解密,以保护数据的安全。该方案通过使用 Java 的 Cipher 类和 DES 对称加密算法来实现加密和解密操作。 ...
### Hibernate中文问题解决方案 在开发基于Java的应用程序时,Hibernate作为一个强大的对象关系映射(ORM)框架被广泛采用。然而,在处理中文字符时,开发者可能会遇到各种各样的问题,如乱码显示等。本文将详细...
本文将深入探讨在使用Hibernate进行数据库操作时遇到的锁问题,并提供相应的解决方案。 首先,我们要理解数据库中的锁机制。在多用户并发环境中,为了保证数据的一致性和完整性,数据库系统通常会采用不同类型的锁...
这篇博客"JPA + Hibernate 3 CRUD操作历史审计日志的解决方案"将深入探讨如何实现这一需求。 首先,我们需要理解JPA和Hibernate的基础概念。JPA定义了一组用于持久化Java对象的API,它允许开发者通过面向对象的方式...
### Hibernate 实现动态表查询的多种解决方案 #### 一、前言 在使用Hibernate进行数据库操作时,我们经常需要根据不同的需求对不同的表进行查询。特别是在处理多表、多库等复杂场景时,如何实现动态表查询就显得尤...
### Hibernate常见错误及解决办法 #### 一、Nodefaultconstructorforentity 错误 **问题描述**:在使用...通过以上分析和解决方案,可以有效地解决Hibernate开发过程中常见的错误,提高开发效率和系统的稳定性。
本文将深入探讨这个问题,并提供多种解决方案。 一、问题阐述 在Hibernate的工作流程中,当我们对一个已加载的实体对象进行修改,比如修改了它的属性值,然后没有显式地调用`save()`或`update()`方法,而是直接提交...
本文介绍了在使用Hibernate框架查询Oracle数据库时遇到的一个常见问题——char类型字段映射为单个字符,并提供了三种解决方案。首先,可以通过调整Hibernate的映射方式,使用`addScalar`方法显式指定字段的类型;...
`hibernate`的`dynamic-update`属性提供了对此场景的一种解决方案。如果在`<class>`映射中设置了`dynamic-update="true"`,Hibernate会在生成的SQL更新语句中只包含实际被修改的字段,而不是所有字段。这可以显著...
5. **数据库特定解决方案**:Oracle作为描述中提到的数据库,有一些特定的优化策略,如BFILE类型用于存储外部文件,或者使用LOB分区等,这些可以进一步优化大字段的存储和检索性能。 在提供的实例中,开发者可能...
总结,`Hibernate-tools`是Hibernate生态中不可或缺的一部分,它极大地提高了开发效率,同时也为处理中文注释提供了有效方案。通过合理配置和使用,我们可以避免乱码问题,并生成符合规范的带有丰富注释的实体类代码...
总结来说,Hibernate扩展Middlegen-Hibernate的组合,为Java开发提供了一种高效且灵活的数据库映射解决方案。它通过自动化的方式,降低了数据库到Java对象映射的复杂性,提升了开发效率,是现代企业级应用开发中不可...
以上就是关于"解决Hibernate对于Date类型的数据返回结果中时分秒不对的问题"的详细分析和解决方案。在实际开发中,我们需要结合具体情况进行调整,确保日期时间数据的准确无误。对于提供的文件名"org",可能指的是...
同时,对于遇到的问题,查看源码往往能提供最直接的解决方案。 总之,Hibernate源码的分析和学习可以帮助Java开发者提升数据库编程的效率,更好地理解和利用ORM框架。这个`hibernate-release-4.1.4.Final`版本的...
在 Hibernate 框架中,使用自定义类型映射 Oracle 中的 LONG 类型字段是一种常见的解决方案。通过实现 UserType 接口,我们可以定制 LONG 类型字段的读写操作。在本例中,我们定义了一个名为 CustomLong 的类,该类...
Hibernate是Java中最流行的ORM解决方案之一,它通过XML或注解方式定义映射,使得对象可以直接在数据库中存取。 3. **Hibernate配置**:教程可能详细讲解如何配置Hibernate,包括创建hibernate.cfg.xml文件,设置...
通过阅读《Hibernate_annotation_1to1_foreignKey》文档或博客,你可以更详细地了解如何配置和使用这种关联,包括示例代码、注意事项以及可能遇到的问题和解决方案。理解并熟练运用这些知识,能帮助你在使用...