Java JDO处理唯一约束冲突
我认为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
@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