【发布时间】:2011-12-05 16:22:41
【问题描述】:
我有一个我认为是 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 是这样吗?
【问题讨论】:
标签: java jdo datanucleus unique-constraint