JDO обрабатывает уникальные нарушения ограничений - PullRequest
2 голосов
/ 05 декабря 2011

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

0 голосов
/ 06 декабря 2011

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

...