【发布时间】:2014-04-16 14:58:45
【问题描述】:
我正在创建一堆新的 PrblFldrTbl 对象,并将它们添加到 PrblFldr 对象中的 @OneToMany 列表中。这是在 Jersey REST Web 服务方法中完成的,我的 EntityManager 是这样注入的:
@PersistenceContext(unitName="ProLabel")
private EntityManager em;
然后,在 REST 方法中,我得到了 PrblFldr 对象,我们将从 EntityManager 中添加 PrblFldrTbl 对象,如下所示:
PrblFldr folder = em.find(PrblFldr.class, folderId);
这是我创建 PrblFldrTbl 对象的部分:
List<PrblFldrTbl> tablesToAdd = new ArrayList<PrblFldrTbl>();
for (PrblFldrTbl table: folder.getPrblFldrTbls()) {
// Only adds table if it is part of the previous revision
if (table.getPrblFldrRvsn().getFldrRvsnId() == revisionSeq - 1) {
// Duplicates the table but sets the revision to the provided one
// Also associates the given PrblFldr object with the new PrblFldrTbl
PrblFldrTbl newTable = makeNewRev(table, revision, folder);
// Persists this new PrblFldrTbl object
em.persist(newTable);
// ... irrelevant stuff ...
// Add the table to the list we're going to use later
tablesToAdd.add(newTable);
}
}
这是我将所有这些新的PrblFldrTbl 对象添加到当前PrblFldr 对象的@OneToMany 列表的部分(这样做可以防止与并发修改相关的错误):
folder.getPrblFldrTbls().addAll(tablesToAdd);
当我检查tablesToAdd 列表时,所有PrblFldrTbl 对象都是正确的。它们是新的,它们被持久化到数据库等。当我在.addAll() 方法之后检查folder.getPrblFldrTbls() 的内容时,PrblFldrTbl 对象都被正确添加了。
但有一个问题!当我在不同的服务调用中访问相同的方法 (folder.getPrblFldrTbls()) 时,我添加到列表中的那些 PrblFldrTbl 对象都变成了 null。一切都保存在数据库中,一切都是正确的,但在持久性上下文中一定有什么东西搞砸了。我不想告诉EntityManager 再去取所有东西;当我坚持它时,它应该留下来!知道是什么原因造成的吗?
感谢您的帮助!
【问题讨论】:
标签: java list jpa persistence eclipselink