JDO обрабатывает уникальные нарушения ограничений

У меня есть то, что я считаю распространенным сценарием в 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?

1 ответ

JDODataStoreException с вложенным специфичным для хранилища данных исключением согласно спецификации JDO

Другие вопросы по тегам