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

Struts2 + Hibernate开发笔记(二)

阅读更多
Struts2 + Hibernate开发笔记(二)

二.        Action -> JSP
当要从Action中执行的loadCity方法,要返回到jsp页面时,要在页面上指定一个return的页面.我们在admin-action.xml配置中可以看到一句
<result name="city">/admin/city.jsp</result>
而在loadCity方法中有这样一句
return "city";
这样,当loadCity执行完后,就会返回到http:/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 + Hibernate开发笔记

    Struts2 + Hibernate开发笔记(二).txt

    当要从Action中执行的loadCity方法,要返回到jsp页面时,要在页面上指定一个return的页面.我们在admin-action.xml配置中可以看到一句 &lt;result name="city"&gt;/admin/city.jsp 而在loadCity方法中有这样一句 ...

    轻量级J2EE企业应用实战--Struts+Spring+Hibernate整合开发笔记

    轻量级J2EE企业应用实战--Struts+Spring+Hibernate整合开发笔记

    spring+hibernate+struts2 +mybatis整合笔记

    SSH开发笔记,特别适合入门者学习

    Struts+Hibernate模板开发笔记

    Struts+Hibernate模板开发笔记.doc WORD文档版 本人所发布的所有资源,请访问以下地址 http://download.csdn.net/user/hahaomi23&lt;br&gt;http://download.csdn.net/user/hahaomi23&lt;br&gt;&lt;br&gt;希望这些资源对大家...

    Struts2 + Spring + Hibernate + DWR 项目布署笔记

    NULL 博文链接:https://jsrookie.iteye.com/blog/294756

    struts+spring+hibernate应用开发详解

    这是我学习李刚《struts+spring+hibernate应用开发详解》的详细笔记,知识结构清晰,基本含盖了struts+spring+hibernate所有内容,是我一个一个字敲的,在此分享,希望对大家有帮助。。。

    SSH(Struts+spring+hibernate)整合资料

    java(1) 整合入门(spring,struts,hibernate的整合)资料(1) 中大软件工厂项目前培训资料(1) 完整笔记+源码(1) ssh(1) C#查询参数化例子(1) 学习笔记+完整源码(1) 介绍与深入(1) 学习笔记(不含整合)(1) C#(1) .CHM格式...

    药店管理系统 struts+spring+hibernate

    1 开发环境 d6 up2,sqlserver2000, win2000 server 1024*768(笔记本电脑) c/s 2 第三方控件,ehlib2.1,fastreport2.45,xpmenu,snccurrency ,(有可能用到express bar 但是可以在umain删除引用单元,因为没用到)...

    ssh2学习笔记

    struts2+hibernate+spring开发的项目,含项目集成和一些简单的增删改查,是初学者的首选。

    SSH框架整合示例(Spring、Struts2、Hibernate)

    该资源为SSH框架整合示例(Spring、Struts2、Hibernate),里面包含源代码、jar包等,是直接从MyEclipse中导出的可正常运行的完整项目。其中另含完整开发笔记一份,为此项目搭建的开发过程笔记,可供读者开发练习...

    struts hibernate spring开发用到的jar包

    struts hibernate spring开发用到的jar包整合 struts hibernate spring三者的API中文文档 还有尚学堂ssh培训的学习笔记 看到网上关于ssh的都是一些零散的,把struts hibernate spring用到的资料整合起来,免得到处...

    SSH2整合开发笔记 强悍

    包含Struts2 hibernate spring 的开发笔记,整理的很全 很强悍 对学习SSH2整合有很好好的帮助

    8号店铺源码

    不错的项目源码mysql数据库(教学光盘)(1) struts2权威指南(1) 15天学会jquery(1) struts2+hibernate+spring经典整合实例教程(1) spring框架案例学习文档笔记(1) ext_js(1) struts2,spring

    hibernate笔记

    6 Hibernate核心开发接口介绍(重点) 5 7 对象的三种状态(了解) 5 8 关系映射(重点) 5 9 Hibernate査询(HQL) 5 10 在Struts基础上继续完善BBS200 5 11 性能优化(重点) 5 12 补充话题 5 风格 5 1 先脉络,后...

    ssh小型框架(根据项目自己敲的)

    (基于Struts2+Spring+Hibernate)自己按照视频,搭建的ssh框架。附带数据库表,笔记。 这是一个不完整的项目,如果自己有兴趣,可以继续着手开发。利于初学者学习。

    达内Java 开发教学笔记整理合集

    达内Java 开发教学笔记整理合集: Unix 笔记 Core JAVA 笔记 OOAD思想 笔记 Oracle 笔记 JDBC 笔记 Hibernate 笔记 ...Struts 2 笔记 Ajax 笔记 Spring 笔记 SSH和Ajax的整合 笔记 PL/SQL 笔记 Java和模式 笔记

    吉林大学,大型管理系统OA项目开发笔记

    吉林大学,大型管理系统OA项目开发笔记,Java,Jsp,OA,Struts,Hibernate,Spring。

    java开发笔记.doc

    Servlet基础知识,JDBC,Hibernate,Struts 1.X 使用手册,JavaScript

Global site tag (gtag.js) - Google Analytics