Я учусь использовать Hibernate. Мне интересно, как сделать одновременные вставки в спящем режиме правильно.
У меня есть таблица URL, определенная как:
CREATE TABLE `urls` (
id INT PRIMARY KEY AUTO_INCREMENT,
md5 CHAR(32) UNIQUE,
url TEXT
);
Цель таблицы - поддерживать идентификатор отображения <-> url.
Поле md5 является суммой md5 от url, так как в общем случае url может быть длиннее 1024 байтов, что является ограничением для уникального ограничения в mysql.
Мой вопрос о запросе для функции url-> id, обрабатывающей параллелизм. В реализации JDBC я делаю эти шаги:
- ВЫБЕРИТЕ идентификатор, ГДЕ md5 = md5 (url);
- если существует, вернуть id, иначе:
- ВСТАВИТЬ ИГНОРА В ЗНАЧЕНИЯ URL (MD5, URL) (MD5 (URL), URL);
- Повторите шаг 1.
Хорошо работает, даже если запрошенный URL вставлен между шагами 2 и 3. Как мне сделать это с Hibernate?