У меня есть таблица с уникальным ограничением на 2 столбца (user1 и user2), так что не может быть дублированной пары пользователей. Это выглядит так:
@Table(name = "relation", uniqueConstraints ={
@UniqueConstraint(columnNames = { "user1", "user2" })
})
class Relation{}
...
Столбцы user1
и user2
являются uuid-char
*
Когда я получаю данные от некоторого удаленного конца, я получаю список пар, которые я должен вставить в свою таблицу. Вот список, который я получаю:
{ user1: some-uuid, user2: some-other-uuid }
{ user1: some-uuid, user2: some-other-uuid }
{ user1: some-uuid, user2: some-other-uuid }
... + 1000 records
Затем я перебираю этот список и вставляю все пары:
for(Pair p : data){
try{
relationRepository.save(p);
}
catch(PostgresConstraintViolationException ex){
log("Pair already exists, but that's ok")
}
}
Мой вопрос:
Оказывает ли намеренное отловление ConstraintViolationException какое-либо влияние на производительность? Кажется, это намного лучше, чем проверка наличия пар в базе данных и вставка, если это не так. (1 запрос вместо 2).
Однажды я услышал, что "Это то, для чего существуют исключения". Я понимаю это, но я не уверен, как Postgres ведет себя в этой ситуации.