gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 11:04:14 24 4
gpt4 key购买 nike

我正在开发一个 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 语句,一切正常。

我仍然很好奇为什么这种排序会导致所有折扣从订阅中删除,因此任何对此的评论将不胜感激。谢谢。

关于java - 对涉及无主关系的实体进行持久更改的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33106759/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com