Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Datanucleus JPA更新&;删除操作_Jpa_Datanucleus_Force.com - Fatal编程技术网

Datanucleus JPA更新&;删除操作

Datanucleus JPA更新&;删除操作,jpa,datanucleus,force.com,Jpa,Datanucleus,Force.com,我使用Datanucleus作为JPA引擎在Force.com DB中的实体上执行CRUD。Insert和Select工作正常,但在更新新行时,将创建一个新行,而delete根本不会删除该记录。我使用下面的方法来执行事务 在获取、修改并更新对象之后,代理对象与实际对象的同步是否存在某种问题 似乎由于ORM层(datanucleus+force sdk)无法在更改的对象和原始对象之间进行匹配,它正在创建新行 非常感谢您的帮助 谢谢如果你能发布你的代码,那会有帮助的。但我猜您可能发现了DataNu

我使用Datanucleus作为JPA引擎在Force.com DB中的实体上执行CRUD。Insert和Select工作正常,但在更新新行时,将创建一个新行,而delete根本不会删除该记录。我使用下面的方法来执行事务

在获取、修改并更新对象之后,代理对象与实际对象的同步是否存在某种问题

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

非常感谢您的帮助


谢谢

如果你能发布你的代码,那会有帮助的。但我猜您可能发现了DataNucleus和其他ORM(如Hibernate)在行为上的一个已知差异

你在做这样的事吗

MyEntity ent = new MyEntity();
ent.setId(idFromWebRequest);
ent.setXXX(valueFromWebRequest);
ent = entityManager.merge(ent);
(其中实例化和设置程序可能由数据绑定机制(如SpringMVC)执行)。如果您这样做,它将不适用于DataNucleus,但适用于Hibernate。对于DataNucleus,您必须执行以下操作:

MyEntity ent = entityManager.find(MyEntity.class, idFromWebRequest);
ent.setXXX(valueFromWebRequest);
ent = entityManager.merge(ent);
我更希望它像Hibernate一样工作,但DataNucleus团队认为这是正确的行为。也许他们可以插话。我相信这是一个问题,当你考虑一个实体,一个新的实体与一个独立的实体。如果您的实体实例已分离,则对其调用merge应该重新附加它,并且您的数据库行将在事务提交/刷新时更新。如果它是一个新实例,那么实体管理器将始终创建一个新记录

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


如果你能发布你的代码,那会有帮助。但我猜您可能发现了DataNucleus和其他ORM(如Hibernate)在行为上的一个已知差异

你在做这样的事吗

MyEntity ent = new MyEntity();
ent.setId(idFromWebRequest);
ent.setXXX(valueFromWebRequest);
ent = entityManager.merge(ent);
(其中实例化和设置程序可能由数据绑定机制(如SpringMVC)执行)。如果您这样做,它将不适用于DataNucleus,但适用于Hibernate。对于DataNucleus,您必须执行以下操作:

MyEntity ent = entityManager.find(MyEntity.class, idFromWebRequest);
ent.setXXX(valueFromWebRequest);
ent = entityManager.merge(ent);
我更希望它像Hibernate一样工作,但DataNucleus团队认为这是正确的行为。也许他们可以插话。我相信这是一个问题,当你考虑一个实体,一个新的实体与一个独立的实体。如果您的实体实例已分离,则对其调用merge应该重新附加它,并且您的数据库行将在事务提交/刷新时更新。如果它是一个新实例,那么实体管理器将始终创建一个新记录

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


您正在使用Salesforce.com自己的DataNucleus插件作为其数据存储。这不是开源的,你最好问问他们。任何DataNucleus使用的日志都会告诉您很多信息,所以请查看它;-)即使我没有使用Force.com,我也会遇到同样的问题。您使用的是Salesforce.com自己的DataNucleus插件,用于他们的数据存储。这不是开源的,你最好问问他们。任何DataNucleus使用的日志都会告诉您很多信息,所以请查看它;-)即使我没有使用Force,我也会遇到同样的问题。很明显,DataNucleus遵循JPA规范(并通过了该规范)。如果传入“merge”的对象是“transient”(即不是持久的,也不是分离的),那么它将被持久化(作为新对象)。只能通过调用detach()或关闭EntityManager来“分离”。如果有人想投入时间来实施,那么他们可以选择其他行为。由于VMForce实际上是商业化的,受益于DataNucleus,但迄今为止尚未对其做出贡献,因此如果他们想要该功能,这是他们的选择,也称为opensource.Database.com SDK是开源的:。我非常肯定Fiaz Hossain已经为DataNucleus提供了补丁。Jesper,感谢您的链接,因为您已经将其开源;希望一切顺利。我将更新DN文档以链接到它。Fiaz在DN JIRA中提出了3个问题,我从他那里收到的唯一一件事是关于其中一个问题的未经验证的建议,并且我没有收到任何我知道与Salesforce有关联的其他人的补丁。感谢您的关注,DataNucleus遵循JPA规范(并通过了它)。如果传入“merge”的对象是“transient”(即不是持久的,也不是分离的),那么它将被持久化(作为新对象)。只能通过调用detach()或关闭EntityManager来“分离”。如果有人想投入时间来实施,那么他们可以选择其他行为。由于VMForce实际上是商业化的,受益于DataNucleus,但迄今为止尚未对其做出贡献,因此如果他们想要该功能,这是他们的选择,也称为opensource.Database.com SDK是开源的:。我非常肯定Fiaz Hossain已经为DataNucleus提供了补丁。Jesper,感谢您的链接,因为您已经将其开源;希望一切顺利。我将更新DN文档以链接到它。Fiaz在DN JIRA中提出了3个问题,我从他那里收到的唯一一件事是关于其中一个问题的未经验证的建议,并且我没有收到任何我知道与Salesforce有关联的其他人的补丁。谢谢你的关注