Datanucleus JPA Update&删除操作

时间:2011-05-10 13:41:48

标签: jpa datanucleus force.com

我使用Datanucleus作为JPA引擎在Force.com DB中的实体上执行CRUD。 “插入”和“选择”工作正常,但更新新行时会创建,删除不会删除记录。我正在使用以下内容进行交易执行

在获取,修改对象并进行更新后,代理对象与实际对象同步是否存在问题。

似乎由于ORM层(datanucleus + force sdk)无法在更改的对象和原始对象之间进行匹配,因此它正在着陆创建新行。

非常感谢任何帮助。

谢谢

1 个答案:

答案 0 :(得分:0)

如果您可以发布您的代码,这将有所帮助。但我猜你可能会在DataNucleus和其他ORM(如Hibernate)之间的行为上发生已知的差异。

你在做这样的事吗?

MyEntity ent = new MyEntity();
ent.setId(idFromWebRequest);
ent.setXXX(valueFromWebRequest);
ent = entityManager.merge(ent);

(实例化和setter可能由Spring MVC等数据绑定机制执行)。如果你这样做,它将使用DataNucleus,但它与Hibernate一起使用。对于DataNucleus,您必须改为:

MyEntity ent = entityManager.find(MyEntity.class, idFromWebRequest);
ent.setXXX(valueFromWebRequest);
ent = entityManager.merge(ent);

我希望它像Hibernate一样工作,但DataNucleus团队认为这是正确的行为。也许他们可以插话。我认为这是一个问题,当你认为一个实体是一个新实体而不是一个独立的实体。如果你的实体实例是分离的,那么在它上面调用merge应该重新附加它,你的数据库行将在事务提交/刷新时更新。如果它是一个新实例,那么实体管理器将始终创建一个新记录。

至于你的删除问题,我不知道它是什么。也许您可以发布代码示例?您可以在此处使用JPA提供程序找到完整的CRUD示例应用程序:

https://github.com/forcedotcom/javasample-musiclib