2013-01-24 84 views
0

我正在嘗試一個OneToMany單向關係的主子測試用例。 我有一個場景,我想通過從子列表中刪除一些條目來更新主服務器。當我進行合併時,我希望這些子條目被自動刪除。OpenJPA孤兒刪除不起作用

我試圖徒勞得到這個工作。我也試過孤兒音樂,但那也沒有幫助。有一些建議可以添加equals和hashcode,但這也不起作用。

任何暗示或在這方面的幫助,高度讚賞。謝謝。

我使用JPA2.0使用OpenJPA 2.1.0

這裏是我的代碼。

//Parent class 
public class Account { 
    private String accountId; 
    private String accountNumber; 
    private List<SubAccount> subAccounts; 

    //followed by getters/setters 
} 

//Child class 
public class SubAccount { 
    private String subAccountId; 
    private String subAccountNumber; 
    //followed by getters/setters 
} 

我的orm.xml如下。

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<entity-mappings version="2.0" 
    xmlns="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"> 

    <entity name="Account" class="test.data.Account"> 
     <table name="ACCOUNT" /> 

     <sequence-generator name="AccountSeq" 
      sequence-name="ACCOUNT_TEST_SEQ" /> 

     <attributes> 

      <id name="accountId"> 
       <column name="ACCOUNT_ID" /> 
       <generated-value strategy="SEQUENCE" generator="AccountSeq" /> 
      </id> 

      <basic name="accountNumber"> 
       <column name="ACCOUNT_NO" /> 
      </basic> 

      <one-to-many name="subAccounts" fetch="EAGER" 
       target-entity="test.data.SubAccount" orphan-removal="true" > 
       <join-column name="ACCOUNT_ID" referenced-column-name="ACCOUNT_ID" nullable="false" updatable="true"/> 
       <cascade> 
        <cascade-all /> 
       </cascade> 
      </one-to-many> 

     </attributes> 
    </entity> 

    <entity name="SubAccount" class="test.data.SubAccount"> 
     <table name="SUBACCOUNT" /> 

     <sequence-generator name="SubAccountSeq" 
      sequence-name="SUBACCOUNT_TEST_SEQ" /> 

     <attributes> 
      <id name="subAccountPK"> 
       <column name="SUBACCOUNT_ID" /> 
       <generated-value strategy="SEQUENCE" generator="AccountSeq" /> 
      </id> 
      <basic name="subAccountNumber"> 
       <column name="SUBACCOUNT_NO" /> 
      </basic> 
     </attributes> 
    </entity> 

</entity-mappings> 

這就是我想要做的。

Account acc = (Account)entityMgr.find(Account.class, "1100") 
acc.getSubAccounts().remove(0); 
entityMgr.merge(acc) 

我希望子帳號被刪除。

回答

0

如果級聯類型設置爲cascade-all或cascade-remove,則OpenJPA會覆蓋孤兒刪除行爲。

除了cascade-all之外,我不得不配置cascade-cascade-caster-caster-castil-merge,cascade-refresh和cascade-detach。

+0

雖然它適用於上述情況。級聯刪除不起作用的原因很明顯。 – praveenj