我正在使用Java2EE构建一个应用程序,我有几个实体,包括这两个:
实体产品(代码段):
@Entity
public class Product implements Serializable {
@ManyToMany(mappedBy = "products")
private List<KB> kbs;
public List<KB> getKbs() {
return kbs;
}
}
实体KB( K nowledge B ase文章)(摘录):
@Entity
public class KB implements Serializable {
@ManyToMany
private List<Product> products;
}
你能说出来,它们是双向相关的,所以JPA创建了三个表:Product,KB和KB_Product。
我还有EJB和Managed Beans来访问这个实体持久化的数据,这里是我用来检索特定产品的相关KB列表的代码片段:
@SessionScoped
public class ProductController {
private List<KB> associatedKBs;
public List<KB> getAssociatedKBs() {
this.associatedKBs = current.getKbs();
return associatedKBs;
}
}
一切正常:当我将产品与KB关联时,它会被插入数据库(KB_Product表),但是(这就是问题)getKBs()方法只在第一次调用时返回更新的数据。
示例:
1.我创建了一个名为“计算机”的产品
2.我创建了一篇新知识库文章,并将“计算机”与此KB相关联
3.此关联在KB_PRODUCT表中保留
4.第一次调用getKBs()。一切都显示确定。
5.我创建了第二篇知识库文章,并将其与“计算机”相关联
6.此关联将保留在KB_PRODUCT表中
7.再次调用getKBs()但只返回第一个关联,直到我重新部署应用程序。重新部署后,一切都会出现。
编辑:起初我认为这是一个会话问题。事实证明,退出应用程序并再次登录并不能解决问题,只能重新部署。
提前致谢!
答案 0 :(得分:0)
最后我发现了EntityManager.flush()方法,它就是这样做的。
参考文献: http://www.manning-sandbox.com/thread.jspa?threadID=26541&tstart=-1