添加条目后,注释为“Lazy”的映射未更新

时间:2014-10-21 18:35:35

标签: java hibernate hibernate-mapping

我有以下实体:

   class User {
    ..
    ...
    @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "id.uKey")
    @MapKey(name="id.achieveId")
    private Map<Integer, Achievement> achievements;
    ..
    ..
}

在某些时候我打电话给:     状态,Hibernate.initialize();

并且此地图填充了来自DB的条目。

当应用程序继续时,我将新条目保存到数据库表中。

然后我尝试访问地图,但它不包含新条目。

有没有办法让它知道它需要重新选择数据库表?

由于

修改

我添加了这样的新条目:

public void save() {
    ..
    tx = dbs.beginTransaction();

    Achievement ua = new Achievement(key, id);
    dbs.save(ua);

    tx.commit();
}

1 个答案:

答案 0 :(得分:0)

初始化对象后,它驻留在hibernate会话中,并且此会话不能通过底层数据库的更改进行更新。只需从数据库重新加载对象,但在执行此操作之前将其从会话中删除。

但也许,你真正想要的是修改对象中包含的地图。这将是OOP的方式。之后,您可以使用Hibernate保留整个对象。