【发布时间】:2011-03-09 10:13:17
【问题描述】:
这是导致问题的序列:
- 我在数据库中有一个团队记录和 3 个玩家记录。团队实体有一个使用 FetchType.LAZY、CascadeType.ALL 的列表
- webui 上的搜索按钮被点击
- 在服务器端使用 JPA 查询被调用,找到所有的球队记录,在这种情况下,从查询返回的球队实体只有 1 条记录(其中有球员实体列表的代理)
- 将此 teamEntity 映射到 DTO,并将此 DTO 返回到 webui,跳过玩家实体列表的映射
- Webui 以 html 形式呈现 DTO,准备好接收来自用户的修改
- 用户修改团队的属性,例如成立日期
- webui 上的保存按钮被点击
- 将 DTO 转换为团队实体,用于更新现有团队记录
- 但是在这种情况下,如果我使用 em.merge(teamEntity),团队记录将被更新,但球员列表会发生什么?因为从 DTO 转换为团队实体时,teamEntity 有一个空的玩家实体列表。合并后,我注意到 teamEntity 的细节大小为 0。但在刷新该实体 em.refresh(teamEntity) 后,它将返回 3 的详细信息大小。
我很困惑:
- 为什么合并后大小为0?就像不再代表记录一样
- 在进行测试之前,我认为将删除详细信息,因为我将 teamEntity 与空详细信息合并。
请赐教:)
谢谢!
【问题讨论】: