我有以下实体:
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();
}
答案 0 :(得分:0)
初始化对象后,它驻留在hibernate会话中,并且此会话不能通过底层数据库的更改进行更新。只需从数据库重新加载对象,但在执行此操作之前将其从会话中删除。
但也许,你真正想要的是修改对象中包含的地图。这将是OOP的方式。之后,您可以使用Hibernate保留整个对象。