`
keqi24
  • 浏览: 15221 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

科研管理系统总结 1——hibernate的部分update

阅读更多
开篇第一个问题,希望对大家有所帮助。

其实之前还遇到了关于级联保存的问题,但是网上有很多例子这里就不赘述了,把代码列在这里吧。

/**
		 * 具体情境:
		 * 三个实体:软件著作权Certificate 简称c
		 * 			用户信息 UserInfo 简称u
		 * 			软件著作权作者 CertificateAuthor 简称 ca
		 * c与ca 是一对多,在c内以set的形式关联ca
		 * u与ca 一对多 
		 * 
		 * 现在是需要保存c的时候级联保存ca,
		 * 需要设置cascade = CasedeType.ALL
		 */
		
		//c内的ca的set,将作为c的属性保存
		Set<CertificateAuthor> s = new HashSet<CertificateAuthor> (); 
		//构造新的c,没有Id
		Certificate c = new Certificate();
		//load用户信息实体
		UserInfo ui = userInfoService.loadById(1);
		//构造新的CA
		CertificateAuthor ca = new CertificateAuthor();
		/**
		 * 这两步是关键,设置关联
		 * 因为外键关系在ca内维护
		 * 所以两个都需要设置
		 * 否则相应的外键为null
		 */
		ca.setUserInfo(ui);
		ca.setCertificate(c);
		s.add(ca);
		//为c添加set列表
		c.setCertificateAuthors(s);
//		//保存c则会级联保存ca,结束	
		certificateService.save(c);


级联保存基本如上所示了。


进入正题关于hibernate的部分update,众所周知,hibernatee的update方法会把所有的属性都取出来然后更新一下。新的实体的属性会覆盖原有实体的所有属性,如果新的实体某些属性为空的话那么,那么原有的数据也就没了。

关于这一点,hibernate的update不实现部分保存可能是因为部分保存需要先取出原有的数据的version,比较version是否更改然后更新,这样的开销太大了,索性直接更新。

基本的方法有这几种:

1、设置某型是字段为不可更新的,annotation里就是设置列属性(updatable = false);
2、一种xml的设置方法,dymatic-update什么的记不得了网上应该有;
3、HQL 最王道的,就是写的有点麻烦;
4、先把实体load出来,然后逐个对改变的属性set,再更新,但是这样要写很多set

我的方法:
我的思路基本是采用第四种方式,但是做了一定的改动:
用的是org.springframework.beans.BeanUtils的一个copyProperty的方法

直接上代码

/*
		 * 该部分测试实现对Certificate实体的更新
		 */
		/*
		 * 设置一个VO里面有需要更新的属性
		 * 其实这个VO的设置并没有增加代码量
		 * 它主要用来前后台交互的,要么也要写
		 * 而且用它来做中间的复制媒介恰到好处,
		 * 下面有说明
		 */
		CertificateVO c = new CertificateVO();
		//加载待更新的实体
		Certificate uc = certificateService.getById(29);
		/*
		 * 设置待更新的属性
		 * 这个是测试方法,正常情况下是struts自动获取对象
		 * 这步就省了
		 */
		c.setName("test");
//		c.setId(14);
//		certificateService.saveOrUpdate(c);
		/*
		 * 复制属性
		 * 可以查看BeanUtil的API
		 * 第一个参数是源实体
		 * 第二个是目标实体
		 * 第三个参数标明那些实体不能更新
		 * 这个方法只会覆盖属性类型和方法相同的属性
		 * 所以这里用VO真是恰到好处
		 */
		BeanUtils.copyProperties(c, uc,new String[]{"id"});
		
		//更新实体,完成
		certificateService.update(uc);


好了,先写到这里,希望大家多多赐教!!
分享到:
评论

相关推荐

    安卓Android源码——Hibernate4.zip

    在Android环境中,虽然SQLLite是默认的数据库系统,但通过Hibernate可以实现更灵活的数据管理和持久化。 【描述】描述中的"安卓Android源码——Hibernate4.zip"表明这是一个与Android应用开发相关的项目,其中包含...

    Java开发利器——Hibernate 开发及整合应用大全 iso .001

    《Java开发利器——Hibernate 开发及整合应用大全》一书源代码第一部分,共4部分。分享有给需要的朋友!

    Java开发利器——Hibernate 开发及整合应用大全.iso .004

    Java开发利器——Hibernate 开发及整合应用大全.zip.004

    Hibernate总结——课程管理

    本教程将深入探讨如何使用Hibernate来实现一个简单的课程管理系统,涵盖多对多关联映射以及CRUD操作。 ### Hibernate概述 Hibernate是一个开源的ORM框架,它允许开发者使用Java对象来表示数据库中的记录,从而避免...

    JSP源码——车辆管理系统(struts+hibernate+spring+oracle).zip

    这是一个基于Java技术栈的车辆管理系统源码,使用了经典的SSH框架(Struts、Hibernate和Spring)结合Oracle数据库进行开发。SSH框架是Java Web开发中常用的技术组合,它们各自承担着不同的职责,共同构建了一个功能...

    Java开发利器——Hibernate 开发及整合应用大全.iso .003

    《Java开发利器——Hibernate 开发及整合应用大全》光盘第三部分.zip.003

    Java开发利器——Hibernate 开发及整合应用大全.iso .002

    《Java开发利器——Hibernate 开发及整合应用大全》一书光盘,由于大小问题,共分4部分上传。现在是第二部分。

    权限管理系统——数据库部分

    《权限管理系统——数据库部分》是基于Java编程语言开发的一套全面的权限管理解决方案。系统采用SSH(Spring、Struts、Hibernate)三大框架技术,旨在提供高效、安全的用户权限控制功能。此压缩包包含了数据库相关的...

    struts2+hibernate整合的例子——新闻管理系统

    此新闻管理系统展示了如何利用Struts2和Hibernate这两个强大的框架进行集成,以提高开发效率和代码的可维护性。开发者可以通过这个实例学习到如何在实际项目中运用这两种技术,实现数据的高效管理。同时,模糊查找...

    j2ee项目实训——hibernate框架技术

    1. CRUD操作:创建(Create)、读取(Read)、更新(Update)、删除(Delete)是Hibernate的基本功能,通过Session接口提供的方法实现。 2. HQL(Hibernate Query Language):面向对象的查询语言,类似SQL,但更...

    图书管理系统-BookM_JSF_Hibernate_Spring

    《图书管理系统-BookM_JSF_Hibernate_Spring》是一个基于Java技术栈的Web应用程序,它融合了多个核心技术,包括JavaServer Faces(JSF)、Hibernate、Spring框架以及ajax4jsf库,旨在提供一个高效、易用的图书管理...

    图书管理系统spring+struts+hibernate

    《图书管理系统spring+struts+hibernate》是一款基于Java技术栈开发的图书管理软件,其核心框架包括Spring、Struts和Hibernate。该系统利用MySQL作为数据库存储数据,提供了完整的数据库备份,确保了数据的安全性与...

    MyClipse6.0\Struts2,Spring与Hibernate整合应用,学生成绩管理系统

    《Struts2、Spring与Hibernate整合应用:学生成绩管理系统》 在IT行业中,构建一个高效、稳定的Web应用程序常常需要整合不同的框架。本项目“学生成绩管理系统”就是基于Struts2、Spring和Hibernate三大主流Java ...

    JSP源码——图书管理系统(struts+hibernate+spring).zip

    总之,《JSP源码——图书管理系统(struts+hibernate+spring)》是一个全面展示Java Web开发技术的实例,通过学习和研究,可以帮助开发者提升在Web开发领域的专业技能,更好地应对实际工作中的挑战。

    JSP-车辆管理系统(struts+hibernate+spring+oracle)

    JSP-车辆管理系统(struts+hibernate+spring+oracle) 仅供学习交流! 后续会持续分享相关资源,记得关注哦! JSP-车辆管理系统(struts+hibernate+spring+oracle) JSP-车辆管理系统(struts+hibernate+spring+oracle) ...

    JSP实例开发源码——车辆管理系统(struts+hibernate+spring+oracle).zip

    该压缩包文件“JSP实例开发源码——车辆管理系统(struts+hibernate+spring+oracle).zip”是一个基于Java Web技术实现的车辆管理系统的完整源代码。这个系统利用了四大框架——Struts、Hibernate、Spring和Oracle...

    struts——hibernate—spring增删改查

    1. **添加(Create)**:用户通过前端界面提交数据,Struts接收请求并将数据转发到Spring管理的Service层。Service层使用Hibernate的Session对象创建新的实体对象,保存到数据库中。 2. **读取(Read)**:当需要...

    尚硅谷——Hibernate的注解和XML

    在使用jpa时,比如我使用hibernate作为实现,默认情况下如果classpath下有bean validation实现会自动开启JSR-303验证。其通过Listener实现,即可以在如insert、update之前执行验证,如果验证失败会直接抛出验证失败...

Global site tag (gtag.js) - Google Analytics