hibernate 更新数据的问题

xuzhou2013 发布于 2013/08/30 14:05
阅读 880
收藏 0
请教一个问题:


--------------


使用Hibernate,ORM, 将数据库里的一张表(ORG_EMPLOYEE),变成java的一个对象(EmployeeVO),


新增一个员工employee时/*姓名,性别,身份证号,家庭住址*/,hibernate.save(employeeVO), 没有问题,


但是当在其他的jsp页面,查询出这个员工的信息, 想做一些修改(页面并不是所有的信息都显示)


/*比如,身份证号,家庭住址,不显示*/, 如果再次保存,hibernate.save(employeeVO),就会将先前保存的身份证号


set为null,   


当然,所有的信息都查询出来,在页面隐藏一部分信息, 是一种解决办法,


===============


请问: 有更好的解决办法吗?
加载中
0
一身正气
一身正气

还有一个就是在action中根据id查询出来,然后把你修改的这几项set进去,然后update

一身正气
一身正气
http://www.programfan.com/club/showpost.asp?id=13570看着内容你就知道为什么要这么写了。
0
一身正气
一身正气
或者你拼HQL语句也行,那样就不会更新所有的了·····update xxx set xxx.name=xxx
0
xuzhou2013
xuzhou2013

问题就在这里, 之所以使用Hibernate,就是不要再 update employee  a set  a.name=?, id=?.... 实际的项目,一个表有100多列, 太纠结了, 就是只更新30列,也很愁人啊!!!

以前在东软的时候, 前台的数据,是一个xml, 可能是2个表的数据, 后台的action,

分别set一下这两个vo对象(封装好了, xml里的<id> <name> <msg>自动set对应的vo,如果EmployeeVO里没有<msg>,自动忽略 ),然后, hibernate.save(), 保存一下这两个vo,即可 ,查看控制台,输出的SQL正是 update employee emp_0 set emp_0.id=?,emp_0.name=? 确实只更新页面上的信息,其他的信息,没有变为null

当时是公共方法, 没有看底层的实现,遗憾....


0
xuzhou2013
xuzhou2013

这个问题的初衷,是联想到oracle的问题,

oracle也行是这个世界上,性能最好的数据库. 为什么这么快呢?

后台开启了很多进程 写日志LGWR, 写数据DBWR,....

但是,单看每一个进程,比如DBWR,要处理的数据,很是简单(简单至极)

也行这就是分工的好处吧....

后来自己搭框架, 觉得每一个组件,应该只负责一个/两个任务,

例如,struts,无论struts1,struts2,还是struts3,只负责业务控制,交给action处理

前后的数据,统一使用xml或者json...这样,每个组件的任务简单,编程就规范,容易了.

(调用别人的项目,就可能使用webservice,这个时候,你只能使用约定好的规范数据)

假如你过于依赖struts2的标签,如果有一天,你的工程要移植到其他的框架, 而那个框架没有这个标签, 那就麻烦了.

以前在jsp上写脚本<% if()%>,觉得很好,甚至可以直接使用javaBean, 如果是这样的话,要后台做什么??什么样的难题,非要在前台判断业务逻辑,??

 美工人员,心里对你可是恨啊!!!

0
8enet
8enet
在hbm.xml配置文件里加上 dynamic-update=true
0
xuzhou2013
xuzhou2013

比如, 你的项目使用的是struts1, 假如你没有struts1的标签, 要升级到struts2

如果我说, 只要添加struts2的必要的jar包, 修改一下配置文件即可, 以前的项目就可以正常使用了,不用重新修改页面, 后台的action里面的业务逻辑,数据库....

你感觉怎么样? 只要修改下面的内容即可,一切都ok了

   <action 
            path="/doSaveBase64JsonAction" 
            type="com.oreilly.zhou.action.OBase64Action" 
            parameter="method"> 
        <forward name="success" path="/jsp/success.jsp" />    
    </action>   
改为:

<action name="doSaveBase64JsonAction"        class="com.oreilly.zhou.action.OBase64Action">
<result>/jsp/success.jsp</result>
</action>

0
xuzhou2013
xuzhou2013

这几天忙着项目了, 今天测试这个问题. 

结果有点问题.

1.映射文件

2.测试代码

3.测试结果






0
xuzhou2013
xuzhou2013

是哪个地方有问题吗?

请大家帮忙(如果需要源码,请把邮箱发给我,)

----------另外,测试环境,使用的是spring3.0+hibernate3.2

(spring 整合hibernate,使用的是spring的hibernateTemplate,进行增,删,改,查 )

返回顶部
顶部