2011-09-08 73 views
1

我有一些ServiceDefinition實體。我試圖創建一系列包含對一個或多個ServiceDefinition實體的引用的License實體;JPA集合映射到主表

@Entity 

public class License { 

@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
@Column(unique=true, nullable=false) 
private int id; 

@Column(name="serial") 
private int serialNumber; 

@OneToMany(cascade=CascadeType.ALL, orphanRemoval=true) 
protected List<ServiceDefinition> definitions; 

    <-- rest of class omitted --> 

    @Entity 
    public class ServiceDefinition implements Serializable { 


/** 
* 
*/ 
private static final long serialVersionUID = 1L; 
@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
@Column(unique=true, nullable=false) 
private int id; 

    <-- rest of class omitted --> 

當數據庫實例JPA創建了我一個服務定義表,許可表和License_ServiceDefinition表。

我已經能夠添加記錄並將其更新到此結構中,但是當我嘗試刪除許可證時,JPA會從License_ServiceDefinition表和許可證表中刪除條目。然後,JPA嘗試從我不想要的ServiceDefinition表中刪除。

ServiceDefinition是一個「Master」表,與OrderHeader實體可能包含對Customer實體的引用的相同方式,並且刪除OrderHeader不應導致刪除Customer,我希望能夠刪除許可證,它是對ServiceDefinition實體的引用,而不刪除ServiceDefinition本身。我希望這是有道理的。

這是可能的還是我需要手動處理。

問候

問候

回答

1

只是刪除從註釋中cascade=CascadeType.ALLorphanRemoval=true

orphanRemoval=true表示如果服務定義從服務定義列表中刪除,則應刪除它。

CascadeType.ALL表示對許可證所做的每個操作都應級聯到列表中的每個服務定義。因此,如果您刪除許可證,則列表中的服務定義將逐級刪除。

這些屬性有一個含義,並有後果。如果不理解它們的含義,請勿使用它們。並且不要將它們添加到任何地方,因爲認爲你的代碼可能會更好地發揮作用