JDO处理唯一约束违规

时间:2011-12-05 16:22:42

标签: java jdo datanucleus unique-constraint

我认为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是真的吗?

1 个答案:

答案 0 :(得分:0)

JDODataStoreException,具有嵌套的数据存储区特定异常,根据JDO规范