【问题标题】:Unable to persist lists of a graph after deserializing, using hibernate and webservices反序列化后无法持久化图表列表,使用休眠和网络服务
【发布时间】:2015-07-14 15:10:44
【问题描述】:

我有两台应用服务器和两台名为 Xapp Xdbase - Yapp Ydabse 的数据库服务器。在 Xapp 和 Yapp 使用休眠。我需要通过 web 服务同步数据。用一个简单的对象图

@Entity
@Table(name="A_table")
public class A extends PersistentObject 
{
    @Column(name="user")
    private String user;

    @ElementCollection()
    @Enumerated(EnumType.STRING)
    @Column(name="b_column")
    @CollectionTable(name="B_table")
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<B> bList= new Arralist<B>();


    /* Here comes getter and setter for user and bList */
}

public enum B {
    One,Two,Three
}

PersistentObject 是可序列化的并且具有样板代码。

XApp 和 YApp 有这些类。

我在 XApp 中创建了一个新的 A 对象(我们将其命名为 Ainstance),其中包含一个包含两个 B 对象的 B 列表。反序列化 A 并使用 Yapp 的网络服务将其发送给 Yapp。在 Yapp,我反序列化传入的 A 并使用存储库 repo.saveOrUpdate(Ainstance);一切都很好。 Ydbase中的B_table有2条记录。

然后在 XApp 中使用旧的 Ainstance,我将新的 B 添加到列表中并更改用户。然后再次发送A。它在 Yapp 上完美地反序列化了 bList 中的 3 B 记录。但是当调用 repo.saveOrUpdate(Ainstance) 时,用户更改适用于 dbase 但 B_table 有 2 条记录。没有错误,什么都没有。

我尝试合并 Ainstance @YApp 然后更新失败。列表有什么问题?我尝试了一个包含类类型的列表,但它们也没有持续存在。什么错误?

【问题讨论】:

    标签: java hibernate web-services


    【解决方案1】:

    看了几遍,发现答案是“复制”。

    replicate() 旨在代替 save()/persist() 时使用 尽管事实如此,您仍需要保存具有给定标识符的实体 配置生成该实体的标识。

    当某些实体(可能来自外部 系统)具有预先存在的标识符,而其他实体 相同的类型需要生成它们的标识符。

    axtavt 说,@Hibernate: Refresh, Evict, Replicate and Flush

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-10
      • 1970-01-01
      • 1970-01-01
      • 2012-03-23
      相关资源
      最近更新 更多