2015-10-13 21 views
0

我正在開發一個在開發環境中工作得很好的GWT + AppEngine應用程序。但是當我將它部署到GAE時,出現了一個奇怪的問題。問題持續變更涉及一個無主關係的實體

下面的代碼(當然簡化)顯示了涉及的JPA實體。 產品實體擁有一個名爲ProductSubscription的中間實體。這又包含對無主實體訂購的引用,其包含所有權清單折扣實體。爲什麼Subscription是無主的原因是我需要多個產品才能與同一個訂閱相關聯。

@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將訂閱與產品相關聯。

當我對產品進行更改並將其保留時,會發生此問題:折扣從訂閱中消失!這意味着實體會自動從數據存儲中刪除。 任何人都可以解釋我做錯了什麼?我的假設是,由於我使用的是無主關係,所以對產品或ProductSubscription對象的更改不應對訂閱產生影響(實際上,在開發中一切正常)。

任何幫助將不勝感激,因爲我現在卡住了。謝謝。

+0

發佈持久性代碼。在持久性代碼上標記對象所處的狀態。 –

+0

不確定要顯示的內容。我只是從數據存儲中檢索Product對象,啓動一個事務,在該事務中我更新了一些字段(不一定包括ProductSubscription對象)並關閉事務。 – Bax

回答

1

橫空出世,雖然更新的產品,以評估該折扣被應用,我正在整理折扣集合是這樣的:

Collections.sort(discounts, Discount.DESCENDING_COMPARATOR); 

現在我就改變了這種以一個更合適的說法@OrderBy訂閱實體中的列表聲明和一切工作正常。

我仍然很想知道爲什麼該排序導致所有折扣從訂閱中刪除,因此對此的任何評論將不勝感激。謝謝。