Есть ли менее дорогой способ сделать следующую проверку первичного ключа в спящем режиме - PullRequest
1 голос
/ 04 августа 2011

Мне нужно убедиться, что нового поставщика, которого я создаю, не существует.В настоящее время это делается так:

try {
    entityManager.get(SupplierPartEntity.class,
    new SupplierPartPK(supplierID, partID));

    throw new CreateSupplierPartActionException("Supplier part record exists for " + supplierID
    + " / " + partID + ".");
} catch (final RecordNotFoundException e) {
    /* supplier part not found - do nothing */
}

Стоит отметить, что entityManager сгенерирует исключение не найденная запись, когда get () обычно возвращает ноль;

Ответы [ 2 ]

1 голос
/ 04 августа 2011

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

0 голосов
/ 04 августа 2011

Похоже, вы используете Идентификатор поставщика и Идентификатор детали в качестве основного ключа для обеспечения уникальности?

Почему бы не попытаться создать новую запись и отследить нарушение ограничения уникальности, когда / если это произойдет? (Извините, этот предмет уже существует)

...