我正在使用toplink作为ORM工具,但我面临一个特殊的问题。我要在会话中插入一个实体,然后在下一行中如果我尝试加载相同的实体,则无法获取该实体,而是将其返回给我。但是,如果我尝试使用休眠模式,则会出现相同的问题,那么它可以正常工作。谁能帮忙。
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为null。我不明白,因为我要使用相同的键插入对象,然后尝试检索它...请帮助我...
最佳答案
这是本机TopLink / EclipseLink代码。您仅在UnitOfWork中“注册”地址,该地址直到提交后才会写出。
有两种方法可以从UnitOfWork获取未提交的结果。在上述情况下,可以在注册新对象之前调用uow.setShouldNewObjectsBeCached(true),然后readObject调用将找到它。
您还可以将readObject调用更改为ReadObjectQuery并在查询上设置conformResultsInUnitOfWork。
如果您只是从EclipseLink / TopLink开始,那么我建议使用JPA API。您将可以在JPA上找到许多资源。然后,一旦您开始优化代码或开始解决复杂的情况,就可以使用EclipseLink邮件列表和论坛来获得EclipseLink特定的帮助。
关于java - 在toplink中插入后无法加载实体,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3308902/