对涉及无主关系的实体进行持久更改的问题

Issue in persisting changes to an entity involving an unowned relationship

我正在开发一个 GWT + AppEngine 应用程序,它在开发环境中工作得很好。但是当我将它部署到GAE时,出现了一个奇怪的问题。

下面的代码(当然是经过简化的)显示了涉及的 JPA 实体。 Product 实体拥有一个名为 ProductSubscription 的中间实体。这又包含对无主实体 Subscription 的引用,后者包含 Discount 实体的拥有列表。订阅无主的原因是我需要多个产品与同一个订阅相关联。

@Entity
public class Product
{
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Key key;

    // Product subscription details
    @OneToOne(cascade=CascadeType.ALL, orphanRemoval=true, fetch=FetchType.EAGER)
    private ProductSubscription productSubscription;
}


@Entity
public class ProductSubscription
{
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Key key;

    @Basic(fetch=FetchType.EAGER)
    @Unowned
    private Subscription subscription;

    @OneToOne(optional=false, mappedBy="productSubscription", targetEntity=Product.class, fetch=FetchType.LAZY)
    private Product product;
}


@Entity
public class Subscription
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Key key;

    @OneToMany(cascade=CascadeType.ALL, mappedBy="subscription", orphanRemoval=true, fetch=FetchType.EAGER)
    private List<Discount> discounts;
}


@Entity
public class Discount
{
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Key key;

    @ManyToOne(optional=false, targetEntity=Subscription.class, fetch=FetchType.LAZY)
    private Subscription subscription;
}

在我的工作流程中,我创建了订阅对象及其折扣。然后在单独的交易中,我通过 LicenseSubscription 将订阅关联到产品。

当我对产品进行更改并坚持时出现问题:折扣从订阅中消失!这意味着实体会自动从数据存储中删除。 任何人都可以解释我做错了什么?我的假设是,当我使用无主关系时,对 Product 或 ProductSubscription 对象的任何更改都不会对订阅产生影响(事实上,在开发中一切正常)。

任何帮助将不胜感激,因为我现在被困住了。谢谢

原来在更新产品时,为了评估要应用的折扣,我按如下方式对折扣集合进行排序:

Collections.sort(discounts, Discount.DESCENDING_COMPARATOR);

现在我将其更改为订阅实体中列表声明中更合适的 @OrderBy 语句,一切正常。

我仍然很想知道为什么排序会导致订阅中的所有折扣都被取消,所以如果对此有任何评论,我们将不胜感激。谢谢