Struts2+Hibernate开发笔记
Hibernate学习笔记

Hibernate项目的构建与配置1.在项目里倒入Hibernate所必须的Jar包(1)Hibernate框架可以使用在任何的Java项目里,并不一定是Web项目。
只需要在项目里倒入Hibernate所必须要使用的jar包就可以了。
(2)在Hibernate的官网下载hibernate-release-4.2.2.Final.zip解压,要使用Hibernate必须导入的jar包就在目录“hibernate-release-4.2.2.Final\lib\required”下。
倒入此路径下的所有jar包就可以了。
2.配置hibernate.cfg.xml文件(1)配置hibernate.cfg.xml文件可以参考“\project\etc”目录下的hibernate.cfg.xml文件与hibernate.properties文件。
(2)使用Hibernate连接MySQL的hibernate.cfg.xml配置文件如下:<hibernate-configuration><session-factory>(设置显示Hibernate产生的SQL语句)<property name="show_sql">true</property>(设置MySQL的SQL语法的方言)<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>(设置MySQL的驱动程序)<property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>(设置MySQL的数据库路径、用户名、密码)<property name="hibernate.connection.url">jdbc:mysql:///java</property><property name="ername">root</property><property name="hibernate.connection.password">lizhiwei</property>(设置当数据库要保存的表不存在时,就新建表)<property name="hibernate.hbm2ddl.auto">update</property>(设置对象与数据库表的关系映射文件)<mapping resource="vo/User.hbm.xml"/></session-factory></hibernate-configuration>(3)此配置文件一般放在项目的src目录下。
Struct2、Hibernate3、Spring3框架搭建实战

Struct2、Hibernate3、Spring3框架搭建实战采⽤⽬前最新的struts-2.3.1.2、hibernate3.6.10.Final、spring-framework-3.1.1.RELEASE开发包,以及eclipse-jee-indigo-SR2-win32、apache-tomcat-7.0.27服务器、JDK6和mysql5做开发环境,参考了前辈的⼀篇相关⽂章,改正了其中的错误和疏漏,克服了公司分配的“新”机器每⼩时⾃动重启三次的困难,终于把环境给搭好了。
整个过程中遵循的⼀个原则是,避免引⼊⽤不到的jar包,以求搭建⼀个最⼩的SSH 运⾏环境。
⾸先创建⼀个Dynamic web project 输⼊任意名字如SSHBase。
第⼀步:加载Spring环境我们需要引⼊的包有:org.springframework.asm-3.1.1.RELEASE.jarorg.springframework.beans-3.1.1.RELEASE.jarorg.springframework.context-3.1.1.RELEASE.jarorg.springframework.core-3.1.1.RELEASE.jarorg.springframework.expression-3.1.1.RELEASE.jarorg.springframework.jdbc-3.1.1.RELEASE.jarorg.springframework.web-3.1.1.RELEASE.jarorg.springframework.orm-3.1.1.RELEASE.jar由于spring默认开启了⽇志,还需要加⼊commons-logging的jar包,否则会报错。
建议不要⼀次性加⼊应该先加最核⼼的运⾏代码看缺少什么加什么,这样就不会加多余的包进来了,spring3已经把包按功能分开,不像以前⼀个包,这样更灵活,只要运⾏我们需要的功能,⽽没⽤到的就不⽤在硬性的添加进来。
Struts2知识点总结

Struts2基础知识Struts2概述1.Struts2框架应用javaee三层结构中的web层框架。
2.Struts2框架在struts1和webwork基础之上发展的全新框架。
3.Struts2所解决的问题:在以往实现一个功能时,都需要写很多的servlet,从而造成后期维护上的不方便。
图解:4.现在比较稳定的Struts2版本struts-2.3.24-all.zip5.web层常见框架1.struts2.springMVCStruts2框架入门1.导入jar包1.在lib里面有jar包,但不能全部导入,因为里面含有一些spring包,是不能使用的,导入会导致程序不能运行。
2.到app目录里面复制案例的jar包是最好的方法。
2.创建action3.配置action类的访问路径1.创建struts2核心配置文件,该核心配置文件位置和名称是固定的,位置必须在src下面,名称为struts.xml 。
2.引入dtd约束,可以在案例文件中找到,复制在struts.xml文件中即可。
3.action的配置*注意访问路径:http://域名/端口号/项目名/action名.action注意:.action可以省略,但建议不要省略,为了兼容一些老版本的浏览器。
4.配置Struts2的过滤器,可以在案例中的web.xml文件中找到,复制粘贴即可。
Struts2执行过程图解:Struts2配置1.是一种常量标签2.修改Struts2的默认常量值1.常用方式在struts.xml中进行配置。
2.其它两种方式1.在src下面创建struts.properties文件并修改。
2.在web.xml文件中进行修改。
3.Struts2最常用的常量struts.il8n.encoding=UTF-8,解决表单在通过post方式提交中文时,中文乱码的问题。
Struts2笔记(一)可使用全局页面。
1、配置方法:在package标签下配置2、注意:该标签只能在一个package标签中使用,如果有多个标签,需要重新定义。
01、struts2(Struts2开发入门 、常用配置、参数传递) - 副本

1. Struts2简介1.1. 什么是Struts21.1.1. Struts2的概念Struts2是轻量级的MVC框架,它主要解决了请求分发的问题,重心在于控制层和表现层。
轻量级,指的是Struts2具有较低的侵入性,就是它对我们业务代码的依赖程度很低,简单来说,在使用Struts2框架时,我们的业务代码中基本上不需要import它的包。
Struts2实现了MVC,满足了MVC设计思想。
在我们使用Struts2做开发的时候,就相当于使用了MVC,这是Struts2自动帮助我们实现的,是默认的、隐含的,我们不需要再写特别的代码来实现MVC了。
作为一个框架,Struts2提供了一系列的API,我们可以使用它们来简化代码的编写,从而提升开发效率。
这些API复用程度很高,对业务代码的依赖性也很小,甚至很多是Struts2自动调用的,因此在很大程度上,我们的开发变得可以复用。
Struts2解决请求分发的问题,我们会在后面为什么使用Struts2中讲解。
重心在控制层和表现层,是纵观整个Struts2理论课程来看的,从中我们会体会到这一点,随着大家对Struts2的逐步了解,届时我们再回顾这一点。
1.1.2. 什么是MVCMVC是代码的分层思想,是软件设计领域经典的设计模式。
它根据代码功能的不同,将一个软件的代码分为3部分,即模型、视图、控制器,这3部分代码的含义和功能如下。
1、M-Model 模型模型(Model)的职责是负责业务逻辑。
包含两层:业务数据和业务处理逻辑。
比如实体类、DAO、Service都属于模型层。
2、V-View 视图视图(View)的职责是负责显示界面和用户交互(收集用户信息)。
属于视图的组件是不包含业务逻辑和控制逻辑的JSP。
3、C-Controller 控制器控制器是模型层M和视图层V之间的桥梁,用于控制流程。
比如:在Servlet项目中的单一控制器ActionServlet。
程序员实习日记

程序员实习日记程序员实习日记范文大全程序员实习日记一今天就简单聊聊上面的Struts+Spring+Hibernate吧。
Struts 代表:表示层;Spring代表:业务逻辑层;Hibernate则代表持久层。
他们是目前在Java Web编程开发中用得最多的框架,其实这样区分是为了适应软件开发过程中各个分工部门之间保持一致性的需要。
说得简单点就是大家都在一个模式下写代码,这样就能保证写出来的程序能被每一个人都能够读懂,而且有些基本的东西它可以自动帮你生成,不用你自己一个一个的敲了,达到了代码复用。
这样保证可读性的同时也提高了开发效率,从而降低了成本。
Struts这个框架其实就是Java MVC设计模式中(简称Model1与Model2)Model2的一个具体实现,Spring 则通过提供ICO(控制反转,也称依赖注入)实现了对对象甚至事务(如声明式事务)的集中管理,此外还引入了AOP(对向切面编程),当然也完全兼容其它框架。
Hibernate吗,就是一个实现对象与关系映射的中间件,大家知道,现在的主流数据库还是关系型的,但编程却已经采用了面向对象的思想,如何让编程人员能像操作对象一样,操纵数据库里的数据呢?Hibernate就是这样一种框架。
以前Java程序员与数据库打交道都是通过JDBC,还要写 SQL语句,不过Hibernate 彻底改变了这一切,它在JDBC之上又作了一次封装,从而实现了不用写SQL语句就可以实现操作数据库。
值得提醒的是,这三个框架都是轻量级的,没有侵入性或者侵入性很低,不像EJB这样的重量级框架,它们都能最大限度的.实现代码的可复用。
程序员实习日记二又是一个雨天,早上上班时间还下得很大,就没起床了。
直接电话向经理请了假,说是头痛下午再过去了,还好经理爽快的答应了,要不一去就会露馅现出原形的!上午上网,下载了三个网站源码,本想找个部署运行看下效果,结果一看,后台数据库全不一样:分别使用了三个不同的数据库(SQL Server2000、Oracle、Mysql),很是无奈。
Struts2详细实例教程

Struts2(上)一、经典的MVC模式二、Struts1.x对MVC的实现三、Struts1.x的主要组件和作用组件作用ActionServlet 中央控制器Action 分控制器,调用JavaBean实现业务逻辑,Action可以分为Action、DispatchAction等不同类型ActionForm 封装参数,实现服务器验证,文件上传等Forward 转发到目的地,可以是JSP,也可以是另一个ActionStruts-config.xml 配置文件,配置有ActionForm,Action,Forward等,通过XML解析,然后使用反射技术使用该文件Struts标签库和JSTL类似,和Struts-config.xml、ActionForm、Action等对象可以紧密集成四、Struts1.x 开发实例-登录程序见案例。
五、Struts2(WebWork)的MVCStruts2的MVC架构六、Struts2的主要组件组件作用FilterDispatcher 起中央控制器作用的过滤器Action 处于Model层的Action,调用JavaBean实现业务逻辑struts.xml 核心配置文件,配置有Action、Result等result 和forward类似,转发的目的地,支持多种视图技术。
七、Struts2的实例-登录在MyEclipse环境中建立一个新的web工程,名称“Struts2Login”,存放路径“f:\Struts2Login”。
在Struts2.0.11版本中找到war包struts2-blank-2.0.11.war,解开该war包,在WEB-INF/lib 目录下复制出所有的jar包,这些jar包就是一个Struts2程序所需要的基础jar包,把它们复制到新建的web工程的WEB-INF/lib目录中。
在src目录下建立一个类,包名mypack,类名UserAction,其代码如下:package mypack;import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport {private String username;private String userpass;public String getUsername() {return username;}public void setUsername(String username) {ername = username;}public String getUserpass() {return userpass;}public void setUserpass(String userpass) {erpass = userpass;}@Overridepublic String execute() throws Exception {if ("Mike".equals(username) && "123".equals(userpass)|| "张三".equals(username) && "abc".equals(userpass))return "success";elsereturn "error";}}在src目录下建立Struts2的配置文件struts.xml,内容如下:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><!-- 定义包管理配置的action 继承struts-default.xml中的配置 --><package name="actions" extends="struts-default"><!-- 定义Action(login.action) --><action name="login" class="erAction"><!-- 定义转发路径对应的字符串名 --><result name="success">/Success.jsp</result><result name="error">/Error.jsp</result></action></package></struts>修改web.xml,在其中加入一个过滤器,过滤/*路径。
Struts+Spring+Hibernate整合入门详解

3、运行eclipse,选择一个空目录作为工作区(工程结构如下:其中我们要写的Java代码在Java Resource: src(以后直接称src)下,网站根目录内容在WebContent下,类所在根目录是WEB-INF/classes,Eclipse 会自动将build/classes里面已经编译的类同步过去。
向WEB-INF下的lib目录添加如下所列的jar包。
(1)这些包在下载解压后Spring,Struts,Hibernate的lib目录或者dist/module目录下面(如果不在,可以到网上google一把。
列表中mysql-*.jar包是MySQL数据库的JDBC Driver)。
也可以把所有lib和dist 下的jar包拷贝过来(可以在系统复制这些jar包,然后到Eclipse里面选中WEB-INF里面的lib包,然后粘帖就可以了)。
但要注意全拷贝可能会存在冲突,如struts*plugin.jar等包不能引入,否则不能运行。
(2)这些Jar包是:antlr-2.7.2.jarcglib-nodep-2.1_3.jarcommons-beanutils-1.6.jarcommons-chain-1.1.jarcommons-collections-2.1.1.jarcommons-dbcp.jarcommons-digester.jarcommons-logging-1.0.4.jarcommons-logging-api-1.1.jarcommons-pool.jarcommons-validator-1.3.0.jardom4j-1.6.1.jarel-api.jarel-ri.jarfreemarker-2.3.8.jarhibernate3.jarjsf-api.jarjta.jarmysql-connector-java-3.0.14-production-bin.jarognl-2.6.11.jaroro-2.0.8.jarspring-hibernate3.jarspring.jarstruts-config.xmlstruts-core-1.3.5.jarstruts2-codebehind-plugin-2.0.9.jarstruts2-config-browser-plugin-2.0.9.jarstruts2-core-2.0.9.jarstruts2-jasperreports-plugin-2.0.9.jarstruts2-jfreechart-plugin-2.0.9.jarstruts2-jsf-plugin-2.0.9.jarstruts2-pell-multipart-plugin-2.0.9.jarstruts2-plexus-plugin-2.0.9.jarstruts2-sitegraph-plugin-2.0.9.jarstruts2-sitemesh-plugin-2.0.9.jarstruts2-spring-plugin-2.0.9.jarstruts2-struts1-plugin-2.0.9.jarstruts2-tiles-plugin-2.0.9.jartiles-api-2.0.4.jartiles-core-2.0.4.jartiles-jsp-2.0.4.jarindex.jsp的内容如表,我们暂时不分析。
struts2+hibernate+spring经典整合实例教程

Struts2与Spring、Hibernate三者整合的过程示例:示例工具:MyEclipse 7.0、Tomcat 6.0、MySql步骤:1.创建一个WEB工程,命名为BookShop(名字自己取,此处为示例工程名);2.导入struts2的核心jar包,也就是在WEB-INF下的lib文件夹中放入jar包文件,如下图(图中jar包为示例版本):3.加载spring,选中工程名,右击并选择【MyEclipse】选项下的【Add Spring Capabilities...】(或者在工具栏中选择【MyEclipse】下的【Add Spring Capabilities...】),在弹出的对话框中进行如下图所示操作:点击【Next】,点击Folder文本框后的【Browse】,在弹出对话框中选择spring配置文件存储位置为WEB-INF 文件夹,如下图所示:点击【OK】后,再点击【Finish】完成。
至此,已经完成加载spring,在WEB-INF文件夹下已经生成了配置文件applicationContext.xml。
4.加载Hibernate,选择【MyEclipse】下的【Add Hibernate Capabilities...】,在弹出对话框中进行如下图所示操作:点击【Next】后,选择Existing Spring configuration file单选框,在SessionFactory Id文本框中填入"sessionFactory",如下图所示:点击【Next】,进行如下图所示操作:该操作中,只需在Bean Id文本框中输入一个Id名,作为数据库源的代用名,意义不大。
然后在DB Driver 下拉列表中,选择MyEclipse中创建好的数据库源xiaoqi,其他信息将自动填写。
点击【Next】,在弹出对话框中去掉Create SessionFactory class?复选框,不创建该类,点击【Finish】完成(创建过程中,加载的jar包文件可能有重复,所以这个时候如果提示有某些jar包重复,问全部保存【Keep Exiting】,还是替换掉【Replace】,可以选择替换掉【Replace】)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Struts2 + Hibernate开发笔记(一)由于开发任务紧张,因为这里的开发笔记,仅用于记录遇到的几个struts2和hibernate结合开发的现象.不对其做分析.1. 在使用struts2时,页面和action之间的传值这是struts2和struts1最大的区别.Struts2中,action和jsp页面之间的信息交互,是通过action中定义的成员变量来实现的.例如,我在一个名为EstateAction的类中有如下定义public class CityAction extends BaseAction {private MthCity mthCity ;private String cityName;private Long cityIdprivate int couter;public String loadCity() throws DataAccessException, BaseException{counter ++;return "city";}}然后,这里上面的类中的成员类MthCity的定义如下public class MthCity implements java.io.Serializable {private Long cityIdprivate String cityName;public MthCity() {public Long getCityId() {return this.cityId;}public void setCityId(Long cityId) {this.cityId = cityId;public String getCityName() {return this.cityName;}public void setCityName(String cityName) {this.cityName = cityName;}}这是一个Hibatenate使用的数据对象POJO类.有了这两个类后,我们来看看Struts2的Action和JSP页面之间是如何交互的一. JSP -> ActionJsp页面以下是一个jsp页面submit.jsp.这个页面只有一个功能,就是向struts提交申请<%@ page language="java" contentType="text/html; charset=gbk"%><%@ include file="/common/taglibs.jsp"%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gbk" /><title>提交</title></head><script>function go (){window.location ="${pageContext.request.contextPath}/admin/city/loadCity.do”;}</script><body><form name=”myform” ><input type="button" name="cityupdate" id="cityupdate" value="编辑" onclick="javascript:go();"/> <input type="hidden" name="mthCity.cityName" id=" mthCity " value="广州" /></form></body></html>大家可以看到,这个页面只有一个按钮,将页面提交到struts的一个action中,这是为什么呢.我们先看一段struts2的配置文件admin-action.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><package name="admin" namespace="/admin" extends="struts-default"><action name="city/*" method="{1}"class="com.mytophome.admin.representation.struts.action.CityAction"><result name="city">/admin/city.jsp</result><result name="city_update">/admin/city_update.jsp</result></action></package></struts>这是一个struts2的典型配置文件.上面有几处要注意的首先是namespace = “/admin” 这是一个struts模块名,可以不写,但如果写了,能比较方便的将struts2的action按配置来分模块.(何谓分模块呢?struts2有个特性,是action定义不需要像struts1一样写在同一个struts.xml文件中.而是可以使用include的形式.例如我使用的项目的struts.xml文件就是这样写的:<struts><include file="struts-action/admin-action.xml"/><include file="struts-action/agent-action.xml"/></struts>这样include了一系统的xml配置,而上面的admin-action.xml文件就是其中一段,因此将这一段中涉及的action类设定为一个模块,就定namespace = “/admin”)其次<action name="city/*" method="{1}"这一句配置的意思,就是,当用户提交一个符合struts2格式的申请时(所有包含.do形式的http链接)例如http://localhost/admin/city/loadCity.do其中包含了/city/那么在配置文件中,只要定义action name=”city/*”,那么所有包含有/city/的do,都会提交到action定义的类中来,也就是类om.mytophome.admin.representation.struts.action.CityAction中,那么提交到这个类的哪个方法中呢? 因为选择的是city/*.而且method={1},所以方法名由链接指定也就是loadCity.do所指定的.loadCity方法.λ这个do方法后面是可以带参数的.所带的参数名,要是CityAction中定义的成员变量,包括成员类.例如,如果想提交后,CityAction中的cityId有值,链接可以这样写http://localhost/admin/city/loadCity.do?cityId=9这样,在loadCity方法中,如果你访问cityId,就可以发现cityId的值是9System.out.println(Long.toString(cityId));但这里有一个条件,就是CityAction中,必须要有cityId变量的getter/setter方法(这两个方法可以用MyEclipse自动生成)public Long getCityId() {return cityId;}public void setCityId(Long cityId) {this.cityId = cityId;}如果要给CityAction中的MthCity类的这样才能在jsp页面提交时,由struts为cityId赋值.(当然,getter方法就方便当action返回到jsp页面时,cityId的值能在页面取到.)λ如果要为action中的类成员变量赋值也是可以的例如http://localhost/admin/city/load ... mp;mthCity.cityId=8这条链接提交后,会和上面一样调用CityAction的loadCity方法,但这里,action的成员mthCity会被创建实例,并为mthCity的一个属性cityId赋值,也就是说,在action中,大家可以通过mthCity.getCityId()来获得这个属性的值.当然,一定要在action设置mthCity的getter setter,jsp上的内容才能传到action中public MthCity getMthCity()return mthCity;}public void setMthCity(MthCity city) {this. mthCity = city;}从JSP提交内容到Action,还有一种方法,就是将参数内容放在表单form的元素中 <input type="hidden" name="mthCity.cityName" id=" mthCity " value="广州" />这样,当用以下语句表单提交的时候doucment. myform.submit();就能在Action中创建一个mthCity实例,并为mthCity.cityName设置值为:广州.原因是在页面的表单元素中,设置了name= mthCity.cityName,而action中刚好有成员类叫mthCity,而这个类中刚好有属性叫cityName.,就是通过这样的方法,能将表单的内容,提交到Action中.Struts2 + Hibernate开发笔记(二)二. 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 cityIdprivate 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""/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="ng.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="ng.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的出错.。