afsfsdfdsfsdf 2009-06-08 15:31
浏览 248
已采纳

spring2.5+JPA+hibernate+struts2的级联保存

使用的开发环境spring2.5+JPA+hibernate+struts2
模型 是一张employee表,一张client表,销售表sale,销售明细表sale_details
sale表中,包括字段employee_id,client_id以与employee、client表关联。
问题是:
在维护sale表时,增加数据填写employee、client信息时,都没错误,但是更新这两个字段信息时确出现错误提示:说把employee表里面id的原来的值给改了,因为id是主键不能修改,所以就提示错误。比如sale表中保存的employee_id为3,在employee中有条记录与此对应,现在在UI中选择id为4的用户,然后保存,则提示上面说的错误。
我查找了entity的关系设置,基本上没什么问题啊,而且使用testcase测试也没问题;

[b]问题是在保存sale表时,struts的action中为什么会去保存employee的实体呢?[/b]

我前台用的employee选择是struts2的下拉框组件。
这问题困扰了我好几天
有那位仁兄知道的,请指教,先谢谢了

[b]问题补充:[/b]
JPA里面没设置啊,我把代码写出来,您看一下
@ManyToOne(cascade=CascadeType.Refresh)
public Employee getEmployee() {
return this.employee;
}
CascadeType的几种我都试过的,都不行
@ManyToOne 什么也不加也试过,也不行
[b]问题补充:[/b]
@ManyToOne什么也不写呢?那还能产生级联更新问题吗?
麻烦告诉我设置方式,我查了一些资料,试了一些,还没找到正确方式
[b]问题补充:[/b]
现在是不需要级联更新的,如,更新sale表的employee信息时,别去更新employee实体去,我在配置sale实体与employee实体关系时使用@ManyToOne什么也没加,也出现问题。
另外补充一下:客户端action中,我用了modeldriven,在页面中使用struts2的下拉框组件

sea723 朋友遇到的问题 和我这个是一个意思
[b]问题补充:[/b]
问题已解决,感谢iampurse 和 sea723
我现在也是在action中,建立了虚拟的属性

  • 写回答

9条回答 默认 最新

  • iampurse 2009-06-10 08:51
    关注

    楼上的很有才,什么叫莫名其妙的答案。

    别人连代码 运行环境都没有 给你提供解决思路,你就这点态度?

    出现这个问题可能有两个原因(据我猜想,也可能是你说的莫名其妙)

    一是: OneToMany 和 ManyToOne配置有问题,建议你先看看书在来写。
    二是:你更新级联关系的时候代码有问题,配置他的fetchType="lazy"
    不要即时取出来,然后new一个新的父节点 并设置给他。

    [code="java"]
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "parentid")
    public WsUnit getWsUnit() {
    return this.wsUnit;
    }

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "wsUnit")
    public Set<WsUnit> getWsUnits() {
        return this.wsUnits;
    }
    

    [/code]

    你修改的时候,他的父节点 被你取出来的话,直接就变成一个受管实体。
    你修改的父节点的话,他自动会设置到原来的那个去。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(8条)

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料