Java 如何在hibernate中刷新关联实体?
我刚开始冬眠。现在,我有两个Hibernate实体Java 如何在hibernate中刷新关联实体?,java,hibernate,Java,Hibernate,我刚开始冬眠。现在,我有两个Hibernate实体 @Entity @Proxy(lazy = false) public class EntityA { ... @OneToMany(mappedBy = "a", cascade = CascadeType.REFRESH, fetch = FetchType.EAGER) @Fetch(FetchMode.SELECT) private List<EntityB> listB; ... }
@Entity
@Proxy(lazy = false)
public class EntityA {
...
@OneToMany(mappedBy = "a", cascade = CascadeType.REFRESH, fetch = FetchType.EAGER)
@Fetch(FetchMode.SELECT)
private List<EntityB> listB;
...
}
假设我有两个门户要使用下面的函数更新TableB
public void saveB(EntityB b) {
Session session = null;
Transaction t = null;
try {
session = openSession();
t = session.beginTransaction();
session.save(b);
session.refresh(b);
t.commit();
} catch (Exception e) {
rollback(t);
throw new RuntimeException(e);
} finally {
closeSession(session);
}
}
问题是,当我通过门户1保存B时,它确实会保存到数据库中,但是,当门户2加载实体A时,我在保存实体A之前没有看到新记录(然后,显示B的更改)。为了澄清这个问题,举个例子,如果我第一次在门户2上加载实体A页面,我可以看到页面上有五条B记录。现在,我通过portal 1再添加一个B,然后在看到数据库中的记录后,在portal 2中重新加载实体A页面。然而,该页面仍然给我五条B记录。如果单击“立即保存”(保存实体A),页面将重新加载,然后我可以在页面上看到六条B记录
我做了一些研究,我认为这可能是二级缓存问题,有人说使用CascadeType.REFRESH
可能会有所帮助。但事实并非如此。我还尝试使用session.refresh(b)
,如上所示。这并没有解决问题。请帮忙。谢谢
public void saveB(EntityB b) {
Session session = null;
Transaction t = null;
try {
session = openSession();
t = session.beginTransaction();
session.save(b);
session.refresh(b);
t.commit();
} catch (Exception e) {
rollback(t);
throw new RuntimeException(e);
} finally {
closeSession(session);
}
}