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的確如此嗎?