解决一个Hibernate的 unsaved-value问题散分200

v38 2007-02-07 06:21:30
做一个小东西,自已重新建了一个spring+hiberante+struts框架,在此框架中开发。
为提高开发速度,在struts 的Action form Bean 采用了LazyValidatorForm。
在Action 中用BeanUtil.copyproperits()来把值从form中加载到pojo对象中,
在保存这个pojo时,调用由spring托管的Hibernate底层的saveOrUpdate()方法来持久化。
这时问题来了,老是报错,无法通过。
通过调置断点,发现在用BeanUtil.copyproperits()拷贝的时候,pojo中的ID主键本是NULL的,被BeanUtil.copyproperits()设置为了0
当pojo传给DAO的saveOrUpdate()方法时,因其实ID为0,误认为此操作为update.

在hibernate 的mapping xml的<id> 中,加入unsaved-value=0
问题解决,且当id不为0为NULL的时候,也会被正常的判断为SAVE操作

特此散分~
...全文
498 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
howyeahz2 2007-02-17
  • 打赏
  • 举报
回复
接分过年,就好象收利市一样,开心开心,呵呵呵呵~~~~~
v38 2007-02-09
  • 打赏
  • 举报
回复
结贴,以下回复无效
theseraph 2007-02-09
  • 打赏
  • 举报
回复
给分不接,实乃有罪
okcome 2007-02-09
  • 打赏
  • 举报
回复
呵呵,看来赶上了
limao1358 2007-02-09
  • 打赏
  • 举报
回复
我公司的项目中用的也是DTO拷贝,不过我想用清缓存,我公司中的拷贝还是深度拷贝,连集合属性都可以,我觉得是不是用清除缓存效果要好点.
jicken_woo 2007-02-09
  • 打赏
  • 举报
回复
-_-#
  • 打赏
  • 举报
回复
呵呵,接之
shan1119 2007-02-09
  • 打赏
  • 举报
回复
接分
Rick_ang 2007-02-09
  • 打赏
  • 举报
回复
接分
v38 2007-02-09
  • 打赏
  • 举报
回复
恭喜.你用的是DTO拷贝??
=====================
是的,没有想到BeanUtil自多做情,把NULL给当0了,折腾了我半天
long_drago 2007-02-08
  • 打赏
  • 举报
回复
有学到点东西
limao1358 2007-02-08
  • 打赏
  • 举报
回复
恭喜.你用的是DTO拷贝??
v38 2007-02-08
  • 打赏
  • 举报
回复
怎么没有人接分啊?十个人以上就结貼
Eddie005 2007-02-07
  • 打赏
  • 举报
回复
接分~
blh 2007-02-07
  • 打赏
  • 举报
回复
不懂 :)
sg552 2007-02-07
  • 打赏
  • 举报
回复
呵呵。。。恭喜楼主!!!

解决问题之后的快感,不是一般的爽!!!

羡慕!!!
v38 2007-02-07
  • 打赏
  • 举报
回复
为什么我的分没有接?
被BS了:(汗一个
先看效果: https://pan.quark.cn/s/a4b39357ea24 在详细解析`hibernate-mapping`参数之前,有必要首先掌握Hibernate的核心概念。 Hibernate作为一个开源的对象关系映射(ORM)框架,赋予开发者以面向对象的方法来操作数据库。 `hibernate-mapping`作为Hibernate配置文件的关键组成部分,其作用在于明确Java对象与数据库表之间的映射机制。 1. `default-access`:该参数规定了Hibernate访问对象属性的具体方式。 其默认值是`property`,即Hibernate将通过getter和setter方法来读写属性。 若需自定义访问策略,可以通过实现`PropertyAccessor`接口来指定。 2. `default-lazy`:在默认情形下,未明确标注`lazy`属性的Java属性和集合将采用懒加载机制,即在实际需要时才进行加载。 若将其设置为`false`,则这些属性和集合会在加载实体时即刻加载。 3. `auto-import`:此参数默认值为`true`,允许在HQL查询中使用非全限定类名。 若设为`false`,则查询中必须使用完全限定的类名,以避免类名冲突。 4. `cascade`:级联操作是Hibernate中的一个重要特性,用于管理对象之间的关联。 `cascade`参数可设置为`all`、`none`、`save-update`、`delete`等值,用以控制何时对关联对象执行相同的操作。 例如,`none`表示不进行级联操作,而`all`则意味着在任何操作中都进行级联。 5. `unsaved-value`:该属性用于标识新创建且尚未保存的实例。 其值通常是某个...

23,406

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧