最近老和同事争执一个Spring+Hibernate更新数据库的问题,由于使用Spring控制Hibernate事务,所以我的Service层很简单:
public class CompanyServiceImpl implements CompanyService {
private CompanyDao companyDao;
public void setCompanyDao(CompanyDao companyDao) {
this.companyDao = companyDao;
}
public void updateCompany(Company company) throws BusinessException {
try {
companyDao.updateCompanyInfo(company);
} catch (DataAccessException dae) {
throw new BusinessException("error.data.access");
}
}
一个很普通的调用Dao的方法,但是我这个同事说必须考虑并发的问题,如果两个人同时操作,一个人将这个对象删除了,而另一人去更新肯定要出错。
所以他的写法:
sychronized(this){
try {
Company company= compnayDao.getCompanyByFK(String id);
company.setCompanyName("111");
companyDao.updateCompanyInfo(company);
} catch (DataAccessException dae) {
throw new BusinessException("error.data.access");
}
}
它的做法是在更新之前将对象取出,然后只更新相应的字段,这样就已经增加了一次数据库操作(不过我认为这个在某些时候哦还是可以接受的,如工作流),但是他又加上了同步……
争来争去也没有结果,我也不知道有什么更好的办法,的确同步的问题在B/S架构中是很令人头疼的事情,这个涉及到脏数据读取的问题也是有很多解决办法,Spring的事务管理就可以处理,但是我还不知道怎么用。我觉得我的方法已经可以处理,因为捕获了DataAccessException 异常,或者我也可以在可预知的情况下捕获其他异常进行识别,但是这样也比较复杂,也很可能因为某些原因无法达到效果。
所以在这里提问,希望大家都来讨论一下,你认为怎样做或者你的项目中对于脏数据、并发访问控制和处理的解决方法。
分享到:
相关推荐
Struts、Spring 和 Hibernate 是Java开发中非常著名的三个开源框架,它们构成了经典的“SSH”(Struts + Spring + Hibernate)企业级应用开发架构。这个架构为开发者提供了模型-视图-控制器(MVC)设计模式的实现,...
综上所述,车辆管理系统利用Struts处理用户交互,Hibernate管理数据库持久化,Spring提供依赖注入和事务管理,而Oracle数据库则存储所有车辆相关数据。这样的架构设计保证了系统的高效运行和可扩展性,为车辆管理...
2. **导入依赖**:在项目的pom.xml文件中添加Struts2、Spring、Hibernate和相关依赖库。 3. **配置Struts2**:编写struts.xml配置文件,定义Action类及其对应的URL、结果页面等。同时,需要配置Struts2与Spring的...
4. **前后端交互**:前端JavaScript通过DWR调用后端的Java方法,这些方法由Spring管理并可能涉及Hibernate操作。数据在服务器和客户端之间以JSON格式传递,实现了高效的数据交换。 **项目结构** 从压缩包文件名"DWR...
在本场景中,我们将讨论如何在现有MySQL数据库环境下,配置Spring和Hibernate来实现数据访问。 首先,我们需要在项目中引入Spring和Hibernate的相关库。通常,这可以通过在`pom.xml`(如果你的项目使用Maven)或`...
1. 搭建集成环境:介绍如何配置Struts 2、Spring和Hibernate的项目结构,以及相关的XML配置文件,如struts.xml、spring-context.xml和hibernate.cfg.xml。 2. 实现数据持久化:讲解如何使用Hibernate的注解或XML配置...
Spring作为整体应用的管理容器,负责依赖注入(DI)和面向切面编程(AOP),Struts作为MVC(模型-视图-控制器)架构的实现,处理用户的请求和展示逻辑,而Hibernate则作为持久层框架,管理数据库操作。 **Spring...
整合Hibernate后,可以实现业务层与数据库之间的交互,简化数据存取操作。 本文讨论的整合策略中,描述了三个框架被整合起来之后从最高层次看到的视图,形成了一个完整的架构模式。这种架构模式的特点是分层清晰,...
本项目采用当前主流的MVC和IOC框架spring 3、优秀的ORM框架hibernate和超级厉害的proxool数据库连接池。这个工程demo,是本人在企业应用中的项目缩影,绝对实用于企业的应用。 适合朋友: 1.一直用单独的servlet和...
这个基于Struts 2+Hibernate+Spring实现的论坛系统,充分利用了这些框架的优势,为用户提供了交互性强、数据管理高效的在线讨论平台。 首先,Struts 2 是一个 MVC(Model-View-Controller)框架,它负责处理用户的...
【标题】:“全套源码-论坛系统(Struts 2+Hibernate+Spring实现)”揭示了一个基于Java技术栈开发的论坛系统,它整合了三个重要的框架:Struts 2、Hibernate和Spring。这个项目旨在提供一个完整的解决方案,帮助...
接着,通过Spring的DAO模板(如JdbcTemplate或HibernateTemplate)将ORM操作委托给Hibernate,这样可以避免直接在业务逻辑代码中处理数据库细节。 5. **Web服务配置**: 要实现Web服务,Spring需要配置一个Servlet...
这里我们讨论的是结合Spring、Hibernate和MySQL实现的分页功能,这是一个常见的技术栈组合,广泛应用于Web应用开发。 Spring是一个开源的Java框架,它提供了全面的编程和配置模型,用于构建企业级应用。Spring的IoC...
在实际开发中,Spring MVC处理HTTP请求,Spring负责管理对象和提供服务,Hibernate处理数据库操作,而Bootstrap则用于美化用户界面,实现响应式设计。这样的组合使得开发过程更为高效,同时减少了开发错误和调试时间...
标题“Spring+Hibernate+Proxool连接池”意味着我们将讨论如何将这三大组件集成在一起,以构建一个高效且可扩展的Java Web应用。Spring作为容器,负责管理对象的生命周期和依赖关系;Hibernate则作为一个ORM(对象...
【标题】"Spring MVC + Spring + Hibernate 全注解整合开发视频教程 09" 提供了一次深入了解Java企业级应用开发的机会,特别是在使用Spring MVC、Spring和Hibernate这三大核心框架进行全注解配置的场景下。...
"spring_hibernate_1"和"spring_hibernate_2"可能讲解了Spring与Hibernate的整合,如何通过Spring的HibernateTemplate或HibernateJpaTemplate进行数据库操作,以及事务管理如何在两者之间协同工作,确保数据的一致性...
通过Hibernate,开发者可以将Java对象映射到数据库表,使用简单的对象方法进行CRUD(创建、读取、更新、删除)操作,而不必编写繁琐的SQL语句。Hibernate支持HQL(Hibernate查询语言)和Criteria API,使得查询更加...
当Flex、Spring和Hibernate结合在一起时,通常会形成这样的架构:Flex作为前端展示,通过AMF与Spring应用服务器通信,Spring管理业务逻辑并调用Hibernate进行数据持久化操作。下面,我们将详细讨论这种整合方式: 1...