2011-12-05 135 views
2

我有我認爲是JDO中的一個常見場景。我有一個簡單的持久化類,說JDO處理唯一約束違規

@PersistenceCapable 
public class Person { 

    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.INCREMENT) 
    private long id; 

    @Persistent 
    @Unique 
    private String name 

    //constructor, equals, hashcode, etc... 
} 

然後,我想做一個簡單的插件,但引發自定義異常,如果添加失敗,因爲唯一約束被侵犯

public void addPerson(String name) throws NotUniqueException { 
    PersistenceManager pm = getPM(); 
    Transaction tx = pm.currentTransaction(); 

    try { 
     tx.begin(); 

     Person toAdd = new Person(name); 
     pm.makePersistent(toAdd); 

     // how do I throw a NotUniqueException if the transaction fails due to 
     // "name" not being unique? 

     tx.commit(); 
    } finally { 
     if (tx.isActive()) { 
      tx.rollback(); 
     } 
     pm.close(); 
    } 
} 

如何檢測JDO中的這個錯誤條件?我很滿意,只要檢查和添加操作是原子,必須首先執行查詢以檢查它是否會成功,。我只是剛剛接觸JDO事務,並不確定如果我執行查詢並檢查事務,我會得到什麼保證。

根據this answer,在使用JPA時,我將不得不挖掘特定於供應商的原因異常的異常鏈並使用該信息。 JDO的確如此嗎?

回答

0

JDODataStoreException帶有嵌套數據存儲特定異常,按照JDO規範