Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JDO处理唯一约束冲突_Java_Jdo_Datanucleus_Unique Constraint - Fatal编程技术网

Java JDO处理唯一约束冲突

Java JDO处理唯一约束冲突,java,jdo,datanucleus,unique-constraint,Java,Jdo,Datanucleus,Unique Constraint,我认为JDO中有一个常见的场景。比如说,我有一个简单的持久类 @PersistenceCapable public class Person { @PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.INCREMENT) private long id; @Persistent @Unique private String name //constructor, equ

我认为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中检测这种错误情况?只要check和add操作是原子操作,我就可以首先执行查询来检查它是否会成功。我只是刚接触JDO事务,不确定如果查询并签入事务,会得到什么样的保证


根据,有了JPA,我将不得不挖掘异常链,寻找供应商特定的原因异常,并使用该信息。JDO是这样吗?

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

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