0

我使用 toplink 作为 ORM 工具,我面临一个特殊的问题。我在会话中插入一个实体,然后在下一行中,如果我尝试加载相同的实体,我无法得到它,而是返回 null。但是如果我尝试使用hibernate,同样的问题,那么它可以正常工作。任何人都可以帮忙。

Address address = new Address();
address.setAddressId("1");
address.setPincode(1);
uow2.registerNewObject(address);
ExpressionBuilder builder = new ExpressionBuilder();
Expression expr = builder.get("addressId").equal("1");
Address address1 = (Address)uow2.readObject(Address.class, expr);

最后我得到address1为空。我不明白,因为我正在使用相同的键插入对象,然后尝试检索它...请帮助我...

4

1 回答 1

2

这是本机 TopLink/EclipseLink 代码。您只是在 UnitOfWork 中“注册”地址,该地址在提交之前不会写出。

有几种方法可以从 UnitOfWork 获得未提交的结果。在上面的场景中,您可以在注册新对象之前调用 uow.setShouldNewObjectsBeCached(true),然后 readObject 调用会找到它。

您还可以将 readObject 调用更改为 ReadObjectQuery 并在查询上设置 conformResultsInUnitOfWork。

如果您刚开始使用 EclipseLink/TopLink,那么我建议您使用 JPA API。您将能够在 JPA 上找到许多资源。然后,一旦您开始优化您的代码或开始处理复杂的场景,您就可以使用 EclipseLink 邮件列表和论坛来获得 EclipseLink 特定的帮助。

于 2010-07-23T13:43:19.903 回答