2013-02-27 6 views
2

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

Scheme

Когда скрипт загружает данные и попытаться сохранить тот же адрес в одной транзакции, с ошибкой - ключ продублировать.

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

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

Но у меня есть более 3 refenreces, чтобы обратиться к пунктам в одной транзакции от тендера, организации, тура и т. Д. Эти два примера предназначены только для городов, а не для стран, регионов, ... Поэтому создание условий беспорядочно.

Каковы наиболее эффективные способы решения этой проблемы? Я определил isEqueal и hashCode, но я прочитал, что эти методы предназначены только для множеств.

ответ

0

Я не думаю, что isEqual и hashCode - это то, что вы ищете здесь обязательно, реализация интерфейса Comparable может быть лучше подходит.

Я получаю впечатление от вашего сообщения выше, что вы создаете новые (еще не прикрепленные к сеансу спящего режима) объекты с одинаковыми значениями и затем пытаетесь их сохранить. Возможно, вы сможете идентифицировать эти повторяющиеся случаи перед сохранением, и перед тем, как сохранить, у вас есть как ваша компания, так и тендерная ссылка того же POJO.