У меня есть то, что я считаю распространенным сценарием в 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 и не уверен, какие гарантии я получу, если выполню запрос и проверю транзакцию.
Согласно этому ответу , с JPA мне пришлось бы рыться в цепочке исключений для исключения по причине конкретного продавца и использовать эту информацию. Это правда о JDO?