Как Hibernate может определить, существует ли запись, если попытаться добавить ее? - PullRequest
1 голос
/ 09 февраля 2012

Я загружаю серию файлов в свое приложение, и для каждого файла я проверяю, содержит ли он какие-либо изображения, если да, то я генерирую контрольную сумму для данных изображения и проверяю, находится ли изображение в базе данных, если Я не добавляю его в базу данных. Вся база данных выполняется через Hibernate.

Это прекрасно работает, когда мой код однопоточный, но когда он многопоточный, вызов, чтобы проверить, находится ли изображение в базе данных, может вернуть false, но к тому времени, когда я пытаюсь вставить его, он мог быть добавлен другим потоком, поэтому я затем придется обработать исключение и сделать еще одну попытку получить изображение, чтобы я мог его вернуть.

Могу ли я чем-нибудь помочь в Hibernate, чтобы мне не пришлось выполнять эту дополнительную работу по кодированию?

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

Если контрольная сумма является ключом базы данных для постоянного изображения (вы не используете автоматически сгенерированные ключи), вы можете использовать Session.merge():

Скопировать состояние данного объекта на постоянный объект с тем же идентификатором. Если в данный момент нет постоянного экземпляра, связанного с сеансом, он будет загружен. Вернуть постоянный экземпляр. Если данный экземпляр не сохранен, сохраните копию и верните ее как новый постоянный экземпляр. Данный экземпляр не становится связанным с сеансом.

См. Изменение отдельных объектов , справку Hibernate и JavaDocs Hibernate Core для получения дополнительной информации.

0 голосов
/ 09 февраля 2012

транзакции + блокировка . Прочитайте руководство по транзакциям и параллелизму здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...