http://35java.com/zhibo/forum.php?mod=viewthread&tid=365&extra=page%3D4
二. Action -> JSP
当要从Action中执行的loadCity方法,要返回到jsp页面时,要在页面上指定一个return的页面.我们在admin-action.xml配置中可以看到一句
<result name="city">/admin/city.jsp</result>
而在loadCity方法中有这样一句
return "city";
这样,当loadCity执行完后,就会返回到http://localhost/admin/city.jsp页面.
由于在action中,cityId和mthCity.cityId是被前一个提交过来的jsp页面赋值过,所以当程序执行转到city.jsp页面的时候,这几个值是能被使用的.我们使用jstl来获得这些值
${cityId} , ${mthCity.citId} (前提是只要在action中,设定了cityId和mthCity类的getter/setter.)
2. 当action中的类,传到受hibernate管理的命名空间的类中时
这个问题比较特殊.
我的工程中,建立了一个类cityService.这个类是进行数据库操作的,也就是和hibernate打交道的.而这个类在hibernate的设置中设置为被一个hibernate Session管理的范围.
这个cityService中有一个方法,用于更新city的信息的
public void updateCity(MthCity city) throws DataAccessException,
BaseException{
MthCity icity = this.getCityById( city.getCityId());
icity.setCityName(city.getCityName());
baseHibernateDAO.update(icity);//这个baseHibernateDAO只是一个封封装了hibernate API的包,网上常见.
}
大家可以看到,方法中并没有直接update从参数传进来的city,而是新建了一个icity,装了city中的信息再进行update.
这是因为,cityService这个类被hibernate管理,所以在这个类中创建的内容,才能被更新.所以我们必须使用一个新的MthCity类实例来装着外面传进来的内容,才能更新.否则就会出现类似have the same id object in the session的错误,也就是说session中有其它相同id的对象的错.
当然,有另一个处理办法,就是使用baseHibernateDAO.merge来更新内容,而还是用update
这里就可以写成
public void updateCity(MthCity city) throws DataAccessException,
BaseException{
baseHibernateDAO.merge(icity);
}
3. Hibernate中的version类型成员
在我的项目中,city有一个属性是timestamp,对应的是mth_city这个表,这个表通过hibernate的映射,映射成一个POJO对象
public class MthCity implements java.io.Serializable {
private Long cityId
private Date timestamp;
private String cityName;
public MthCity() {
}
public Long getCityId() {
return this.cityId;
}
public void setCityId(Long cityId) {
this.cityId = cityId;
}
public Date getTimestamp() {
return this.timestamp;
}
public void setTimestamp(Date timestamp) {
this.timestamp = timestamp;
}
public String getCityName() {
return this.cityName;
}
public void setCityName(String cityName) {
this.cityName = cityName;
}
}
大家可以看到,类中有一个属性是timestamp,定义为Date类型.
这个类型是用于记录数据库操作的日期的,数据库中的对应字段也叫timestamp.看一下hibernate的映射配置
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.mytophome.admin.domain.MthCity" table="MTH_CITY" dynamic-update="true">
<id name="cityId" type="java.lang.Long">
<column name="CITY_ID" precision="10" scale="0" />
<generator class="sequence" />
</id>
<version name="timestamp" type="java.util.Date">
<column name="TIMESTAMP" length="7" />
</version>
<property name="cityName" type="java.lang.String">
<column name="CITY_NAME" length="80" />
</property>
</class>
</hibernate-mapping>
大家可以看到,cityid对应数据库表中的CITY_ID字段,其值由oracle sequence生成
而timestamp属性,对应的是数据库的TIMESTAMP字段,并且这个属性在mapping中定义为<version>属性
这样,就会出现两点要注意的地方
数据库中的这个timestamp的字段一定要有值,并且是日期值,否则当hibernate更新这个字段没有值的那条记录时,会出现如下错误
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [com.mytophome.admin.domain.MthCity#1]
在更新MthCity中的值到数据库中,也就是更新一条记录时,一定不设调用方法人工设置timestamp属性的值,也就是下面的语句不能出现
mthCity.setTimeStamp(new Date());
否则也会引起hibernate的出错.
分享到:
相关推荐
### Struts2 + Hibernate开发笔记知识点详解 #### 一、Struts2中Action与JSP交互方式 在Struts2框架中,Action类是处理业务逻辑的核心组件之一,而JSP(JavaServer Pages)主要用于展示数据。为了实现Action与JSP...
### Struts2与Hibernate结合开发的关键知识点 #### 一、Struts2与JSP页面间的交互方式 在Struts2框架中,Action类与JSP页面之间的数据传递机制与Struts1有所不同。Struts2主要依赖于Action类中的成员变量进行数据...
"使用Struts + Spring + Hibernate完成用户登陆笔记" 在本文中,我们将结合Struts、Spring和Hibernate三种技术来完成用户登陆系统的实现。下面是相关的知识点总结: 一、Struts框架简介 * Struts是一个基于MVC...
本篇笔记主要介绍如何将Spring、Hibernate、Struts2与MyBatis进行整合,形成一个完整的Web应用开发框架。 #### 二、环境搭建与准备工作 1. **安装JDK**:确保系统中已经安装了JDK,并配置好环境变量。 2. **下载所...
"Struts2 + Spring + Hibernate + DWR"是一个常见的Java Web开发框架组合,用于构建动态、数据驱动的Web应用程序。这个项目部署笔记将深入探讨这四个组件的核心功能以及它们如何协同工作。 首先,Struts2是一个基于...
轻量级 J2EE 企业应用实战 -- Struts+Spring+Hibernate 整合开发笔记 本资源为轻量级 J2EE 企业应用实战开发笔记,涵盖 Struts、Spring 和 Hibernate 三大框架的整合开发实践。笔记从 JDK 安装和配置环境变量开始,...
这个“struts+spring+hibernate学习笔记”应该涵盖了这三个框架的基础知识以及如何将它们整合使用的详细教程。 Struts是一个基于MVC(Model-View-Controller)设计模式的开源框架,主要用于控制Web应用的流程。它...
SSH是Java开发中广泛使用的三大框架——Struts2、Hibernate和Spring的缩写。这三大框架结合使用,能够构建高效、灵活的企业级Web应用程序。现在,让我们深入探讨这些框架的知识点。 **Struts2笔记** Struts2是MVC...
Struts+Spring+Hibernate 整合是Java Web开发中一种常见的技术栈,也被称为SSH框架。这个整合的主要目的是为了在企业级应用中实现MVC(Model-View-Controller)架构,提供更好的数据持久化、业务逻辑管理和前端展示...
Struts2、Hibernate和Spring是Java开发中三大主流框架,它们各自解决了Web开发中的不同问题,结合使用可以构建出高效、可维护的大型企业级应用。以下是对这三大框架及其结合使用的知识点详解。 **Struts2框架** ...
"留言管理程序_使用Struts + DAO + Hibernate完成笔记"这一项目就展示了如何利用这三种技术来构建一个功能完善的留言管理系统。Struts作为MVC(模型-视图-控制器)框架,提供了良好的结构组织,DAO(数据访问对象)...
SSH项目是一种经典的Java Web开发框架组合,由Spring、Hibernate和Struts2三个开源框架组成。这个项目示例提供了一个基于这些技术的简单应用,帮助开发者理解如何将它们整合在一起进行实际开发。 **Spring框架**是...
Struts+Hibernate模板开发是一种常见的Java Web应用框架组合,用于构建高效、可维护的Web应用程序。Struts作为MVC(模型-视图-控制器)框架,负责处理HTTP请求和业务逻辑,而Hibernate则是一个对象关系映射(ORM)...
### Struts + Spring + Hibernate 整合笔记 #### 前言 随着企业级应用的不断发展壮大,单一框架已经难以满足复杂多变的业务需求。因此,将多种框架进行有机整合成为了开发高效率、高性能应用的重要手段之一。本...
Struts2、Hibernate和Spring是Java开发中三大重要的框架,它们各自解决不同的问题,并通过集成提供了一种强大的企业级应用开发解决方案。这篇文章将详细介绍这三个框架的基本概念、功能以及它们如何协同工作。 首先...
Struts、Spring和Hibernate是Java开发中非常重要的三个开源框架,它们各自负责Web应用程序的不同层面。Struts主要用于控制层,Spring则是一个全面的框架,涵盖了依赖注入、事务管理、AOP(面向切面编程)等多个方面...
Struts、Spring 和 Hibernate 是Java Web开发中的三个关键框架,它们各自解决应用程序的不同层次的问题,组合使用可以构建出高效、可维护的Web应用。在这个"留言管理程序"中,这三者协同工作,实现了对用户留言的...
1 开发环境 d6 up2,sqlserver2000, win2000 server 1024*768(笔记本电脑) c/s 2 第三方控件,ehlib2.1,fastreport2.45,xpmenu,snccurrency ,(有可能用到express bar 但是可以在umain删除引用单元,因为没用到)...
Struts、Spring 和 Hibernate 是Java开发中非常著名的三个开源框架,它们在企业级应用开发中起着关键作用。Struts 是一个 MVC(Model-View-Controller)架构的 Web 框架,Spring 提供了一个全面的后端服务管理平台,...
Struts 2、Spring 2.0 和 Hibernate 3.0 是Java开发中经典的MVC框架组合,它们各自负责不同的职责,共同构建了一个强大的企业级应用架构。在本笔记中,我们将深入探讨这三个框架的整合过程及其核心概念。 **Struts ...