Я занимаюсь разработкой приложения с использованием Hibernate.Одно из полей, которые я вставляю, должно быть уникальным в таблице.Проблема здесь заключается в том, что поле не является первичным ключом, а базовая база данных не поддерживает ограничения «УНИКАЛЬНО».Поэтому я должен применить это в своем коде приложения.
Этот псевдокод - это то, что у меня есть:
void insert(Data data) {
beginTransaction();
boolean exists = existsRecordWithName(data.name);
// Line 7
if (exists == false) {
insertRecord(data);
} else {
display("Name already exists in database!");
}
commit();
}
Но если два разных процесса, куда вставлять данные одновременно,два достигли строки № 7, они подумали бы, что в базе данных нет другой записи с таким же именем, и они оба вставят ее -> результат будет дубликатом.
Так как я могу обеспечить уникальность таким образом?Если бы я использовал чистый SQL, я бы попытался заблокировать таблицу, но я искал решение более высокого уровня, включающее стандартные функции Hibernate, поэтому оно продолжало бы работать, если бы я когда-нибудь изменил бэкэнд.!