2014-11-26 3 views
0

Я использую Hibernate 4.3.6 Final и MySQL 5.5.37.Как проверить, существует ли запись перед вставкой

Предположим, у меня есть две таблицы Book и Words и некоторый код, который анализирует слова в книге и добавляет их в таблицу Words. Будут, конечно, слова, которые появляются в более чем одной книге. Тем не менее, я не хочу новую запись для слова, если она уже находится в базе данных. Вопрос только в том, что Hibernate достаточно умен, чтобы иметь какую-то функциональность для этого?

Есть несколько решений, но ни один из них не очень:

  1. Проверка перед созданием любого Word объекта, если уже есть один, как это в базе данных. Ужасно для производительности.
  2. Поймать исключение, которое бросается при попытке вставить дубликат и обработать его. Ужасная практика.
  3. Имейте какой-то статический указатель слов в базе данных, который периодически обновляется и ищет слово в списке. Возможно, немного быстрее, но все еще ужасно с точки зрения производительности и памяти.

Есть ли лучший подход?

+0

Хотя я понимаю нелюбовь с помощью обработки исключений в качестве логической функции, данный экземпляр вполне приемлемым для этого, и # 2 - ваш лучший выбор. В этом случае вы будете использовать функциональность уникального индекса в своей таблице Words и игнорируете любое исключение, которое оно выбрасывает. –

+0

Это то, что мне тоже хотелось бы попробовать, но я использую DAO для сохранения всех моих объектов в базе данных. Это означает, что я использую один класс для общих операций с БД, что, в свою очередь, означает, что мне придется писать специальный случай для конкретного случая в общем классе. Как-то это кажется очень неправильным. – cgf

ответ

0

У вас есть три варианта:

  1. От клиента (Hibernate) см, если запись существует, если не вставить (может быть выполнено на состояние)
  2. Попробуйте вставить запись, обработать ошибку. Вы говорите, что это плохая практика, но я бы сказал, что это хорошая практика.
  3. Поставьте триггер в базе данных и просто пропустить вставку, если запись существует

Я бы с # 2

Смежные вопросы