我正在開發一個在開發環境中工作得很好的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對象的更改不應對訂閱產生影響(實際上,在開發中一切正常)。
任何幫助將不勝感激,因爲我現在卡住了。謝謝。
發佈持久性代碼。在持久性代碼上標記對象所處的狀態。 –
不確定要顯示的內容。我只是從數據存儲中檢索Product對象,啓動一個事務,在該事務中我更新了一些字段(不一定包括ProductSubscription對象)並關閉事務。 – Bax