В настоящее время я работаю с таблицами с несколькими отношениями «один-два-один», и я пытаюсь реализовать их все с помощью Hibernate.Сохранение уникальных данных в цикле для множественных отношений «один-два-один» в hibernate
Например, три таблицы я являюсь:
продукта (идентификатор, PNAME), пользователи (ID, PID, GID, uname), группа (идентификатор, gname)
Группы находится в одном -в-многим с пользователями
Продукт также в связи один-ко-многим с пользователями
Пользователи в многие-к-одному отношения как с продуктом и группой.
Образец данных я получил бы ниже:
Line 0: pname uname gname
Line 1: Razer Billy admin
Line 2: Razer Sally admin
Line 3: Razer Benji admin
Line 4: Yahoo Molly admin
...
Из приведенного выше примера, я хочу, чтобы мой стол продукта, чтобы в конечном итоге только две записи (Razer и Yahoo) с Razer, связанных с тремя записями в таблицу Users и Yahoo, связанную с одной записью в таблице Users.
Я также хочу, чтобы в моей таблице Group была только одна запись («admin»), которая связана с четырьмя элементами в таблице «Пользователи».
До сих пор, когда я получаю новую строку данных, как я могу убедиться, что нет повторяющихся записей не созданы для продукта и таблица группы, а ссылки на существующих там?
Например, если данные в строке 5 является: Razer Jacky админ, как я могу убедиться, что таблица пользователей добавляет новую запись «Jacky» в то время как эта запись связана с записью «Razer» и «администратор» уже создан, а не создает повторяющиеся записи в таблице «Продукт и группа»?
Моя правильно испорчено петля для данных выглядит следующим образом:
// Three lists of same size created,
// each list is a column of the sample data from above
// ...
Set<Users> users = new HashSet<Users>();
for(int i = 0; i < plist.size; i++){
Product ptemp = new Product(plist.get(i));
Group gtemp = new Group(glist.get(i));
Users utemp = new Users(ptemp, gtemp, ulist.get(i));
users.add(utemp);
ptemp.setUsers(users);
gtemp.setUsers(users);
session.save(ptemp);
session.save(gtemp);
}
Спасибо!
Спасибо за ответ. Просто для уточнения, если упорствовать, вы имеете в виду добавление аннотаций спящего режима (каскадное сохранение) как к продукту, так и к группе? По той же логике я могу проверить наличие в базе данных и использование аннотаций спящего режима? – 000000000000000000000
Поскольку вы не уверены, что погодный продукт или группа уже присутствуют в вашей БД. Вы должны явно загрузить их, найдя их. Это невозможно сделать с помощью 'cascade'.Если вы используете Cascade в этом случае, вы получите дубликаты записей в 'product' и' group' – Ubercool