Вопрос

У меня есть совокупник как уникальный = правдивый .. в классе экзамена .... я обнаружил, что потому, что транзакции обязаны автоматически, чтобы заставить Commite я использую Emc.comMit ()

Однако я хотел бы знать, как проверить, является ли он уникальным. Запрос не является решением, потому что он может быть в центре после проверки из-за аренды ....

Какой лучший способ проверить Uniqness?

List<Exam_Normal> exam_normals = exam.getExam_Normal();
    exam.setExam_Normal(null);

    try {
        em.persist(exam);
        em.flush();

        Long i = 0L;
        if (exam_normals != null) {
            for (Exam_Normal e_n : exam_normals) {
                i++;
                e_n.setItem(i);
                e_n.setId(exam);
                em.persist(e_n);
            }
        }
    } catch (Exception e) {
        System.out.print("sfalma--");
    }
}

подразделение

Это было полезно?

Решение

К сожалению, с JPA нет способа избежать отката транзакции при уникальном нарушении ограничения, поскольку спецификация требует этого исключения, чтобы отметить транзакцию для отката. Кроме того, потому что ряд может не существовать при вызове вызова «блокировки» с использованием API API JPA 2.0. Вызов «блокировки» не убедитесь, что только блокирующая нить может вставить объект. «Замок» предотвратит обновление объекта, но не вставить.

Вам нужно будет выполнить «сохранить», поскольку у вас есть в своем коде, но сохраняйте его как можно ближе к началу транзакции, либо в своей собственной транзакции возникают операция.

Если «настойчик» должен быть частью большей транзакции, и не удается сохранить, не исключает эту часть вашего приложения от успеха, то вы должны хранить экземпляры сущности из этой транзакции, и вы сможете «объединить» их в любой последующий Транзакция, как только ваше приложение восстанавливается из отката.

Другие советы

Однако я хотел бы знать, как проверить, является ли он уникальным. Запуск запроса не является решением, потому что он может быть вставкой после проверки из-за параллелизма ....

JPA 2.0 позволяет Pessimistic Blocking и добавляет три режима блокировки для этого. Это может быть вариант для вашего случая использования.

Некоторые ссылки:

Я предполагаю, что колонна не является первичным ключом (@Id) в этом случае ваша заявка должна гарантировать уникальность. Гарантия уникальности поля, вероятно, придется прийти из других мест. Какой тип стоимости является поле? Вот некоторые идеи

Если это счетчик, то вы, вероятно, можете использовать @Singleton Созначный боб (Javaee 6. см. это.

Если вы используете EE5, то фасоль без приказа @Entity Это отображает автоматически сгенерированный ключ.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top