Java 如何在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; ... }

我刚开始冬眠。现在,我有两个Hibernate实体

@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);
        }
    }