Пожалуйста, разберитесь с этим основным вопросом.
У меня есть таблица T с уникальным ограничением на составные столбцы «A» и «B».
При создании записи в T у меня есть два варианта:
<сильный>1. Выберите и создайте_если_недоступно
а. Выберите * из T, где A='a' и B='b'. б. Если запись недоступна, создайте новую запись (с обработкой ConstraintViolation из-за состояния гонки), в противном случае перейдите к следующему шагу.
<сильный>2. Создавайте всегда
а. Создать запись в БД (с обработкой ConstraintViolation
и опираясь на уникальное ограничение базы данных).
По моему мнению, у 2-го будет меньше запросов к БД и ответов в базе данных (вне кода приложения).
Первый делает много ненужных вызовов, но очень мало зависит от уникальных ограничений базы данных.
Учитывая высокий масштаб, какой из них я должен предпочесть и почему?
Я использую Java, Hibernate и Oracle.
Спасибо,