多次调用同一JPA模型覆盖对象

时间:2013-01-28 16:35:27

标签: java jpa playframework persistence

我有一大堆Play Framework(1.2.5)/ JPA代码,如下所示:

List<MyObject> nL = MyObject.find("uuid", SubscriptionReferrer).fetch();
MyObject n = nL.get(0);
n.subscriptions.add(SubscriptionReference);
n.save();
JPA.em().flush();
JPA.em().getTransaction().commit();

因为它是在控制器领域之外调用的,所以我要求JPA写下记录。无论如何,基本上有人订阅了产品并调用了这个方法。但他们也可以订阅多个产品,同时创建对此方法的多个单独调用。

我似乎遇到的问题是,当呼叫并行运行时,

List<MyObject> nL = MyObject.find("uuid", SubscriptionReferrer).fetch();
MyObject n = nL.get(0);

bit被调用并返回该对象,但该对象是所有调用的个体,当提交save时,最后一个对象获胜,所有其他对象都被覆盖。

==编辑== 此外,我不知道将通过多少订阅,因为它来自第三方支付提供商。

那么,有没有一种合理的方法可以保存对象的所有更新而不需要编写一些额外的缓存层?

由于

汤姆

2 个答案:

答案 0 :(得分:0)

您可以“同步”您的方法,这将确保以原子方式提取和更新对象。使用JPA中的事务也可以。

答案 1 :(得分:0)

糟糕的设计!

睡上了它,并意识到,即使它只是一堆字符串,它更容易创建一个订阅模型,并通过连接将它们保存回主对象。

谢谢你们。